Wiele programów wymaga podniesienia uprawnień podczas uruchamiania (ikona tarczy ikony), jednak aby działały poprawnie, nie potrzebują uprawnień administratora (na przykład ręcznie przyznałeś niezbędne uprawnienia użytkownikom do katalogu programu w plikach programu i gałęziach rejestru używanych przez program). Odpowiednio, przy uruchamianiu takiego programu z poziomu prostego użytkownika, jeśli kontrola konta użytkownika jest włączona na komputerze, pojawi się żądanie UAC i użytkownik będzie musiał wprowadzić hasło administratora. Aby obejść ten mechanizm, wielu po prostu wyłącza kontrolę konta użytkownika lub daje administratorowi prawa na komputerze, dodając je do grupy lokalnych administratorów. Oczywiście obie te metody są niebezpieczne..
Treść
- Dlaczego zwykła aplikacja może wymagać uprawnień administratora
- Uruchamianie programu wymagającego uprawnień administratora od zwykłego użytkownika
- __COMPAT_LAYER zmienna środowiskowa i parametr RunAsInvoker
Dlaczego zwykła aplikacja może wymagać uprawnień administratora
Mogą być wymagane uprawnienia administratora, aby program mógł modyfikować określone pliki (dzienniki, konfiguracje itp.) We własnym folderze w C: \ Program Files (x86) \ SomeApp). Domyślnie użytkownicy nie mają uprawnień do edycji tego katalogu, do normalnego działania takiego programu wymagane są uprawnienia administratora. Aby rozwiązać ten problem, musisz ręcznie przypisać prawo do modyfikacji / zapisu użytkownikowi (lub grupie użytkowników) do folderu programu pod administratorem na poziomie NTFS.
Uwaga. W rzeczywistości praktyka przechowywania zmian danych aplikacji we własnym katalogu w C: \ Program Files jest nieprawidłowa. Bardziej poprawne jest przechowywanie danych aplikacji w profilu użytkownika. Ale to pytanie dotyczy już lenistwa i niekompetencji programistów.Uruchamianie programu wymagającego uprawnień administratora od zwykłego użytkownika
Wcześniej opisaliśmy, jak można wyłączyć żądanie UAC dla określonego programu za pomocą parametru RunAsInvoker. Jednak ta metoda nie jest wystarczająco elastyczna. Możesz także użyć RunAs z hasłem administratora / SAVECRED (również niebezpieczne). Rozważ prostszy sposób, aby zmusić dowolny program do uruchomienia bez uprawnień administratora (i bez wprowadzania hasła administratora) z włączonym UAC (poziom suwaka UAC 4.3 lub 2).
Na przykład weź narzędzie do edycji rejestru - regedit.exe (znajduje się w katalogu C: \ windows \ system32). Po uruchomieniu programu regedit.exe pojawi się okno UAC, a jeśli nie potwierdzisz podniesienia uprawnień, edytor rejestru nie uruchomi się.
Utwórz plik na pulpicie run-as-non-admin.bat z następującym tekstem:
cmd / min / C ”set __COMPAT_LAYER = RUNASINVOKER && start" "% 1"
Teraz, aby wymusić działanie aplikacji bez uprawnień administratora i wyłączyć żądanie UAC, po prostu przeciągnij żądany plik exe do tego pliku nietoperza na pulpicie.
Następnie edytor rejestru powinien uruchomić się bez żądania UAC. Otwórz menedżera procesów i dodaj kolumnę Podwyższone (Przy wyższym poziomie uprawnień) zobaczysz, że system ma proces regedit.exe o nierozwiniętym stanie (rozpoczęty z uprawnieniami użytkownika).
Spróbuj edytować dowolny parametr w gałęzi HKLM. Jak widać, dostęp do edycji rejestru w tej gałęzi jest zabroniony (ten użytkownik nie ma uprawnień do zapisu w gałęziach rejestru systemu). Ale możesz dodawać i edytować klucze we własnym oddziale rejestru użytkowników - HKCU.
Podobnie możesz uruchomić plik nietoperza i określoną aplikację, po prostu określ ścieżkę do pliku wykonywalnego.
run-app-as-non-admin.bat
Ustaw ApplicationPath = "C: \ Program Files \ MyApp \ testapp.exe"
cmd / min / C ”set __COMPAT_LAYER = RUNASINVOKER && start" "% ApplicationPath%"
Możesz także dodać menu kontekstowe, które dodaje możliwość uruchamiania wszystkich aplikacji bez podnoszenia uprawnień. Aby to zrobić, utwórz następujący plik reg i zaimportuj go do rejestru.
Edytor rejestru systemu Windows w wersji 5.00
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker]
@ = "Uruchom jako użytkownik bez podniesienia kontroli konta użytkownika"
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker \ command]
@ = "cmd / min / C \" set __COMPAT_LAYER = RUNASINVOKER && start \ "\" \ "% 1 \" \ ""
Następnie, aby uruchomić dowolną aplikację bez uprawnień administratora, wybierz „Uruchom jako użytkownik bez podniesienia uprawnień UAC”w menu kontekstowym.
__COMPAT_LAYER zmienna środowiskowa i parametr RunAsInvoker
Zmienna środowiskowa __COMPAT_LAYER umożliwia ustawienie różnych poziomów zgodności dla aplikacji (tab Kompatybilność we właściwościach pliku exe). Za pomocą tej zmiennej możesz określić ustawienia zgodności, z którymi chcesz uruchomić program. Na przykład, aby uruchomić aplikację w trybie zgodności z systemem Windows 7 i rozdzielczością 640 × 480, ustaw:
ustaw __COMPAT_LAYER = Win7RTM 640x480
Spośród interesujących opcji dla zmiennej __COMPAT_LAYER wyróżniamy następujące parametry:
- RunAsInvoker - uruchamianie aplikacji z uprawnieniami procesu nadrzędnego bez żądania UAC.
- RunAsHighest - uruchomienie aplikacji z maksymalnymi uprawnieniami dostępnymi dla użytkownika (żądanie UAC pojawia się, jeśli użytkownik ma uprawnienia administratora).
- Runasadmin - uruchomienie aplikacji z uprawnieniami administratora (zawsze pojawia się żądanie AUC).
Tj. parametr RunAsInvoker nie zapewnia uprawnień administratora, a jedynie blokuje wygląd okna UAC.