Zmusić program do uruchomienia * bez * uprawnień administratora lub UAC?

122

Czy jest jakiś sposób, aby zmusić program, który normalnie wymaga uprawnień administratora (przez UAC), aby działał bez nich? (tj .: brak monitu UAC i brak dostępu do całego systemu ).

Dodano: Bez modyfikowania samego pliku wykonywalnego.


Pomimo odpowiedzi Jamesa znalazłem kilka sposobów, że można to prawie zrobić:

  1. Modyfikując plik wykonywalny, mogę usunąć trustInfowpis z manifestu (lub manifestu całkowicie, więc mogę użyć zewnętrznego), pozwalając programowi na uruchomienie bez UAC. Niestety modyfikuje to plik wykonywalny, więc kończy się wkrótce po wewnętrznym teście sumy kontrolnej.
  2. Korzystając z Process Explorer, mogę uruchomić go jako Użytkownik Ograniczony. Wydaje się jednak, że ogranicza to znacznie bardziej, niż bym tego chciał (działa jak tryb chroniony IE, więc może uzyskać dostęp znacznie mniej niż to, co może zrobić mój standardowy użytkownik bez uprawnień).
Andrew Russell
źródło
1
Określasz, że nie modyfikujesz pliku wykonywalnego, ale modyfikowanie pliku .exe jest jednym z twoich sposobów?
cutrightjm
3
@ekaj Podałem tylko, że po tym, jak się dowiedziałem, że to nie zadziała;)
Andrew Russell
Czy możesz podać program, nawet jeśli go już nie używasz? To może pomóc ludziom dowiedzieć się, do czego próbuje uzyskać dostęp, który wymaga uprawnień administratora
cutrightjm
@ ekaj Niestety nie. Jednak nie jest to szczególnie istotne: UAC jest wyzwalany przez program proszący o podniesienie poziomu podczas tworzenia procesu (zwykły sposób - jak w tym przypadku - z manifestem). Po uruchomieniu proces nie może zmienić statusu podniesienia uprawnień - bez względu na ograniczone zasoby, do których próbuje uzyskać dostęp.
Andrew Russell
Jeśli program nie ma manifestu i odmawia uruchomienia bez uprawnień administratora, najprawdopodobniej jest to spowodowane wykryciem Instalatora UAC. Wysłałem to pytanie, a misha256 ma dobre rozwiązanie. Przetestowałem to i mogę potwierdzić, że działa. superuser.com/questions/857616/ ... Przeprowadziłem badania i okazało się, że nie ma powodu do wykrycia Instalatora. Zauważ, że jeśli uprawnienia administratora wynikają z wpisu trustinfo w manifeście, to oczywiście nie zadziała.
user1258361,

Odpowiedzi:

74
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run without privilege elevation"

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

Zapisz ten tekst <name_of_file>.regi dodaj go do rejestru systemu Windows. (Dwukrotne kliknięcie powinno załatwić sprawę).

Następnie kliknij prawym przyciskiem myszy aplikację, którą chcesz uruchomić bez uprawnień administratora i wybierz „Uruchom bez podniesienia uprawnień”.

W niektórych przypadkach - niewielka ilość 0,1% programów może dwukrotnie zapytać o monit UAC.

Vom
źródło
1
Kiedyś korzystałem z podkładki Application Compatibility Toolkit, ale było to dużo pracy dla każdego pliku wykonywalnego i pozostawiłem śmieci w rejestrze dla każdego pliku. Ta metoda działa i bardziej mi się podoba.
Ben Voigt
2
Zaakceptowanie tego, ponieważ wydaje się to najprostszą metodą, a ja ( wreszcie! ) Mogłem to zweryfikować. Ma również bardzo przyjemną właściwość polegającą na tym, że jest banalnie użyteczny jako jednorazowy wiersz poleceń (usuń zewnętrzny, "a następnie zamień \"w ").
Andrew Russell
1
Mam ten sam problem co @Derek, aplikacja wydaje się ciągle pytać o UAC, nie ufam, że ma dostęp do całego systemu, ale potrzebuję jego funkcjonalności.
Gizmo
1
Możesz dodać to do rejestru tylko dla aktualnie zalogowanego użytkownika, zmieniając klucze na: HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker i HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker \ command
GodEater
1
@ jpmc26 Myślę, że /minto błąd. Bez niego rozwiązanie działa dokładnie tak samo. Vom musiał mieć pomieszane cmdi startprzełączniki. Wygląda na to, że cmd.exenie narzeka na złe przełączniki. Spróbuj cmd /whateverna przykład.
cdlvcdlv
53

Zapisz w nonadmin.bat:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

Teraz możesz przeciągać i upuszczać do tego programy, aby uruchamiać je bez administratora.

Nie wymaga to uprawnień administratora, podobnie jak zmiana tego klucza rejestru. Również nie zaśmiecisz menu kontekstowego.

Na podstawie odpowiedzi Vom


Aktualizacja: Powinien teraz działać również z programami, które mają spacje w nazwie.

Hjulle
źródło
Wypróbowałem to na niektórych programach wymagających dostępu do moich dysków i nie mógł ich wykryć lub nie działał w pierwszej kolejności: / ( na przykład rufus rufus.akeo.ie )
keinabel
7
@keinabel To prawdopodobnie dlatego, że tak naprawdę potrzebowali administratora do pracy. Ten skrypt jest przeznaczony dla programów, które wymagają uprawnień administratora bez robienia czegoś, co tego wymaga. Surowy dostęp do dysków jest typową rzeczą administracyjną.
Hjulle,
2
Całkiem schludnie! Był w stanie zainstalować XAMPP przy użyciu tej metody.
Krishnaraj,
Wydaje mi się, że to nie działa dla żadnych plików wykonywalnych w katalogu „C: \ Program Files \ ...”. Dostaję Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try again. Próbowałem tego polecenia kilka razy ręcznie z niewielkimi zmianami i bez powodzenia. Jakieś pomysły?
Jake Smith
1
Miałem ten sam problem z lokalizacją pliku w folderze ze spacjami. Rozwiązano go, usuwając niektóre podwójne cudzysłowy: cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% 1"
ragnar
35

Mam nadzieję, że nie spóźnię się na przyjęcie, ale szukałem podobnego pytania i nie widząc tutaj odpowiedzi, dowiedziałem się, że wbudowane RunAspolecenie systemu Windows , uruchamiane jako administrator, może to zrobić za pomocą /trustlevelprzełącznika.

RUNAS /trustlevel:<TrustLevel> program

/showtrustlevels  displays the trust levels that can be used
                  as arguments to /trustlevel.
/trustlevel       <Level> should be one of levels enumerated
                  in /showtrustlevels.

To zadziałało w moim przypadku. Jak na ironię, jawne uruchomienie programu bez podniesienia uprawnień wymaga podniesionego wiersza polecenia . Domyśl. :) Mam nadzieję, że Ci to pomoże.

Mxx
źródło
Mogę potwierdzić, że to nie działa. Właśnie go przetestowałem i otrzymałem błąd: „BŁĄD RUNAS: Nie można uruchomić - (tutaj nazwa programu). Żądana operacja wymaga podniesienia uprawnień”.
user1258361,
9
@ user1258361 musisz uruchomić to polecenie z podwyższonego monitu, tak jak napisałem pogrubioną czcionką ...
Mxx
Wydaje się, że nie wymaga podwyższonego monitu w systemie Windows 7 ...
SamB
4
Testowany z podniesionym pytaniem, używany wiersz poleceń runas / trustlevel: 0x20000 (program), program i tak działał jako administrator. Dla porównania 0x20000 jest podstawowym użytkownikiem.
user1258361
2
wymaga podniesionego wiersza polecenia ... oczywiście, że tak. W przeciwnym razie nie masz już uprawnień administratora, a wszelkie procesy, które rozpoczniesz, również będą ich brakować.
Twisty Impersonator
16

Jeśli masz konkretną aplikację, którą chcesz zawsze uruchamiać bez UAC, możesz skierować ją do Rejestru (dodaj tekst do pliku REG i zaimportuj go do Rejestru):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\example\\application.exe"="RunAsInvoker"

W przeciwieństwie do tej odpowiedzi to rozwiązanie nie wymaga alternatywnego kliknięcia ani zmiany interakcji użytkownika.

Microsoft nazywa ten proces dodając RunAsInvoker „Kompatybilność Shim” .

palswim
źródło
Odpowiedź na inne, choć powiązane pytanie, stała się inspiracją dla tej odpowiedzi.
palswim
1
Dziękuję Ci bardzo! To była jedyna rzecz, która działała dla mnie! Miałem aplikację, która była wywoływana z menu kontekstowego systemu Windows i zawsze pojawiała się jako administrator, mimo że była wywoływana poprawnie z dowolnego miejsca. Po tej poprawce aplikacja zaczęła być poprawnie wywoływana.
użytkownik
3

Rozwiązałem ten problem dzisiaj, korzystając z zestawu narzędzi do dostosowywania aplikacji MS.

Postępowałem zgodnie z instrukcjami w artykule o republice technologicznej .

Gruntownie:

1) dostajesz zestaw narzędzi od MS tutaj .

2) Kliknij przycisk Napraw

3) Wybierz opcję RunAsInvoker

4) Kliknij poprawkę prawym przyciskiem myszy i wybierz Zainstaluj

użytkownik53639
źródło
Twoja odpowiedź robi dokładnie odwrotność pożądanego efektu. Pierwotnym pytaniem było, jak zmusić aplikację, która prosi o podniesione uprawnienia, aby działała bez podnoszenia. Twoja odpowiedź nadal używa UAC, ale po prostu wyłącza to pytanie. To zła odpowiedź na to pytanie.
Mxx
@ mxx faktycznie nie. Jeśli bieżący użytkownik jest ograniczony (lub masz włączoną kontrolę konta użytkownika), wówczas proces rozpocznie się z ograniczonymi uprawnieniami.
LogicDaemon
1
@ LogicDaemon Jeśli faktycznie czytasz ten artykuł, zobaczysz, że wyjaśnia, że ​​jeśli wykonasz te kroki, uruchomisz aplikację jako Administrator bez monitu UAC . Jest to przeciwieństwo tego, o co poprosił OP.
Mxx
@mxx nie. Czytaj dalej TechNet co RunAsInvoker faktycznie. O to właśnie prosił temat, chociaż działa to tylko w przypadku starszych aplikacji.
LogicDaemon
Tak długo, jak Explorer, inny administrator niż cmd lub jakikolwiek inny standardowy proces jest nadrzędny, RunAsInvoker będzie działał z tymi samymi ograniczonymi prawami. (Eksplorator działa domyślnie ograniczony, w przeciwnym razie nigdy nie poprosiłby Cię o podniesienie uprawnień do usunięcia pliku). Wydaje się, że działa nawet z nowymi aplikacjami. RunAsInvoker oznacza, że ​​dziedziczy dokładnie ten sam token ACL.
SilverbackNet
3

Jeśli jest to plik instalacyjny (instalacyjny) exe, który wymaga uprawnień administratora, można go uruchomić bez podniesionego dostępu:

Jeśli nazwa pliku zawiera słowa takie jak setuplub installWindows wymusza uruchomienie go z podwyższonym dostępem, nawet jeśli nie potrzebuje podwyższonego dostępu:

wprowadź opis zdjęcia tutaj

Jeśli plik .exe zawiera manifest, te heurystyki dotyczące podniesienia uprawnień nie mają zastosowania.

Jest to udokumentowane w dokumentach UAC (Kontrola konta użytkownika):

Wykrywanie instalatora wykrywa pliki instalacyjne, co pomaga zapobiegać uruchamianiu instalacji bez wiedzy i zgody użytkownika.

Wykrywanie instalatora dotyczy tylko:

  • 32-bitowe pliki wykonywalne.

  • Aplikacje bez wymaganego atrybutu poziomu wykonania.

  • Interaktywne procesy uruchomione jako standardowy użytkownik z włączoną funkcją UAC.

Przed utworzeniem procesu 32-bitowego sprawdzane są następujące atrybuty w celu ustalenia, czy jest to instalator:

  • Nazwa pliku zawiera słowa kluczowe, takie jak „instalacja”, „konfiguracja” lub „aktualizacja”.

  • ...

Tryb odczytu tutaj: https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works

Shayan
źródło
2
Oczywiście działa to tylko wtedy, gdy manifest aplikacji nie określa wprost, że musi być uruchomiony z podwyższonym poziomem uprawnień.
Daniel B
3
@DanielB: w rzeczywistości ta sztuczka działa tylko wtedy, gdy nie ma manifestu
AntoineL
1
Pozytywne. Dobra obserwacja. Przydatny byłby również link do oficjalnych dokumentów.
Denis Nikolaenko
@DenisNikolaenko Ty, dodane źródło :)
Shayan
1

Podczas gdy w swoim pytaniu Andrew stwierdził, że następujące nie do końca działały:

Modyfikując plik wykonywalny, mogę usunąć wpis trustInfo z manifestu (lub manifestu całkowicie, więc mogę użyć zewnętrznego), pozwalając programowi na uruchomienie bez UAC. Niestety modyfikuje to plik wykonywalny, więc kończy się wkrótce po wewnętrznym teście sumy kontrolnej.

Byłem w stanie zmodyfikować zewnętrzny plik .manifest dla oprogramowania, którego używałem i zmienić

<ms_asmv2:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

do

<ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" />

Okazuje się, że oprogramowanie, którego używałem, tak naprawdę nie wymagało uprawnień administratora, więc mogłem uruchomić je na koncie użytkownika standardowego bez UAC lub haseł administratora. Dzięki!

Aurimas
źródło
Zamiast tego łatwiej jest edytować plik wykonywalny, ponieważ manifest może być po prostu dołączony do pliku. Zauważ, że prefiks przestrzeni nazw ms_asmv2:również może zostać pominięty. Możliwe jest również, że zmiana rozmiaru osadzonego bloku xml może uszkodzić plik binarny, dlatego też „wymagaAdministratora” należy zmienić na „asInvoker” wypełniony spacją przed tą samą długością spacji.
kdb
-2

Rozwiązałem ten problem, zmieniając uprawnienia do folderu zawierającego program.

Dodałem każdego użytkownika, który uruchomi ten program, i nadałem mu uprawnienia „pełnej kontroli”. To rozwiązało problem i pozostawiłem pole „Uruchom jako administrator” niezaznaczone.

Nie mam żadnych obaw dotyczących bezpieczeństwa użytkowników, którzy będą uruchamiać program.

Tim D.
źródło
-5

Nie, jeśli program wymaga kontroli konta użytkownika, próbuje uzyskać dostęp do czegoś poza obszarem izolowanym. Program nie będzie działał poprawnie bez podniesionego dostępu.

Jeśli chcesz tylko pozbyć się powiadomienia, możesz wyłączyć UAC.

Wyłącz UAC w systemie Windows Vista: Start, wpisz „użytkownik”. Kliknij „Konta użytkowników”. W wyskakującym oknie kliknij „Ustawienia kontroli konta użytkownika”, a następnie Wyłącz UAC.

Wyłącz UAC w Windows 7: Start, wpisz „user”. Kliknij „Ustawienia kontroli konta użytkownika”. Przeciągnij pasek wyboru do samego końca, aby „Nigdy nie powiadamiaj”.

James Watt
źródło
7
Wyłączenie UAC nie jest tym, co próbuję osiągnąć. Ponadto: opis działania UAC jest poprawny tylko w sensie ogólnym. Możliwe jest, że program zażąda UAC, gdy nie jest to absolutnie potrzebne. A UAC dzieje się przed uruchomieniem programu - jeśli uruchomi się, jeśli przekroczy swoje uprawnienia, po prostu otrzyma błędy odmowy uprawnień.
Andrew Russell,
Poza semantyką nie można „wyłączyć” powiadomień UAC dla określonego programu, jednocześnie ograniczając ich dostęp.
James Watt
James: Właściwie - wygląda na to, że możesz - zaktualizowałem swoje pytanie.
Andrew Russell,
Poza modyfikacją samego kodu programu chciałbym wiedzieć, jakie jest działające rozwiązanie, jeśli je znajdziesz.
James Watt