Zagon programa brez skrbniških pravic in zatiranje zahteve UAC

Številni programi zahtevajo dvig pravic pri zagonu (ikona ščita za ikono), vendar za pravilno delovanje ne potrebujejo skrbniških pravic (na primer ste ročno podelili potrebne pravice uporabnikom programskemu imeniku v ProgramFiles in vejah registrov, ki jih uporablja program). Zato se pri zagonu takšnega programa od preprostega uporabnika, če je v računalniku omogočen nadzor uporabniškega računa, prikaže zahteva UAC in uporabnik bo moral vnesti skrbniško geslo. Da bi se izognili temu mehanizmu, mnogi preprosto onemogočijo UAC ali uporabniku dajo pravice skrbnika v računalniku in jih dodajo skupini lokalnih skrbnikov. Seveda sta obe omenjeni metodi nevarni..

Vsebina:

  • Zakaj redna aplikacija morda potrebuje skrbniške pravice
  • Zagon programa, ki od rednega uporabnika zahteva skrbniške pravice
  • __COMPAT_LAYER spremenljivka okolja in parameter RunAsInvoker

Zakaj redna aplikacija morda potrebuje skrbniške pravice

Za program lahko zahtevajo skrbniške pravice za spreminjanje določenih datotek (dnevnikov, konfiguracij itd.) V lastni mapi v C: \ Program Files (x86) \ SomeApp). Uporabniki privzeto nimajo dovoljenja za urejanje tega imenika oziroma za normalno delovanje takega programa so potrebne skrbniške pravice. Če želite rešiti to težavo, morate ročno dodeliti pravico do spreminjanja / pisanja uporabniku (ali skupini uporabnikov) programski mapi pod skrbnikom na ravni NTFS.

Opomba. Dejansko je praksa shranjevanja sprememb podatkov aplikacij v lastnem imeniku v C: \ Program Files napačna. Pravilneje je shranjevanje podatkov aplikacij v uporabniškem profilu. Toda to vprašanje že govori o lenobi in nesposobnosti razvijalcev.

Zagon programa, ki od rednega uporabnika zahteva skrbniške pravice

Prej smo opisali, kako lahko onemogočite zahtevo UAC za določen program s parametrom RunAsInvoker. Vendar ta metoda ni dovolj prilagodljiva. RunAs lahko uporabite tudi z geslom skrbnika / SAVECRED (tudi nevarno). Razmislite o enostavnejšem načinu, da prisili kateri koli program brez skrbniških pravic (in brez vnosa skrbniškega gesla) z omogočenim UAC-om (4.3 ali 2 nivoja drsnika UAC).

Na primer, vzemite pripomoček za urejanje registra - regedit.exe (nahaja se v imeniku C: \ windows \ system32). Ko zaženete regedit.exe, se prikaže okno UAC in, če ne potrdite višine privilegijev, se urejevalnik registra ne zažene..

Ustvari datoteko na namizju run-as-non-admin.bat z naslednjim besedilom:

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

Zdaj, da prisili aplikacijo, da se zažene brez skrbniških pravic in zavira zahtevo UAC, samo povlecite želeno datoteko exe v to datoteko bat.

Po tem naj se urejevalnik registra zažene brez zahteve za UAC. Odprite upravitelja procesov in dodajte stolpec Povišana (Z višjo stopnjo dovoljenj) boste videli, da ima sistem regedit.exe postopek z nerazširjenim statusom (začel se je s pravicami uporabnikov).

Poskusite urediti kateri koli parameter v podružnici HKLM. Kot lahko vidite, je dostop do urejanja registra v tej veji zavrnjen (ta uporabnik nima dovoljenj za pisanje v podružnice sistemskega registra). Ključe lahko dodate in uredite v lastni podružnici registra uporabnikov - HKCU.

Podobno lahko zaženete bat datoteko in določeno aplikacijo, samo določite pot do izvedljive datoteke.

teči-app-as-non-admin.bat

Nastavite ApplicationPath = "C: \ Programske datoteke \ MyApp \ testapp.exe"
cmd / min / C "nastavi __COMPAT_LAYER = RUNASINVOKER && start" "% ApplicationPath%"

Dodate lahko tudi kontekstni meni, ki doda, da se lahko vse aplikacije zaženejo brez dviga dovoljenj. Če želite to narediti, ustvarite naslednjo datoteko reg in jo uvozite v register.

Različica urejevalnika registra Windows 5.00
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker]
@ = "Teči kot uporabnik brez dviga UAC"
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker \ ukaz]
@ = "cmd / min / C \" nastavite __COMPAT_LAYER = RUNASINVOKER && start \ "\" \ "% 1 \" \ ""

Nato zaženite katero koli aplikacijo brez skrbniških pravic, samo izberite »Zaženi kot uporabnik brez dviga UAC"v kontekstnem meniju.

__COMPAT_LAYER spremenljivka okolja in parameter RunAsInvoker

Spremenljivka okolja __COMPAT_LAYER vam omogoča, da nastavite različne ravni združljivosti za aplikacije (zavihek) Združljivost v lastnostih datoteke exe). S to spremenljivko lahko določite nastavitve združljivosti, s katerimi zaženete program. Na primer, če želite aplikacijo zagnati v načinu združljivosti z Windows 7 in ločljivostjo 640 × 480, nastavite:

nastavite __COMPAT_LAYER = Win7RTM 640x480

Med zanimivimi možnostmi za spremenljivko __COMPAT_LAYER izpostavljamo naslednje parametre:

  • RunAsInvoker - zagon aplikacije s privilegiji nadrejenega postopka brez zahteve UAC.
  • RunAsHighest - zagon aplikacije z največ pravicami, ki so na voljo uporabniku (zahteva UAC se pojavi, če ima uporabnik pravice skrbnika).
  • Runasadmin - zagon aplikacije s skrbniškimi pravicami (zahteva AUC se vedno pojavi).

I.e. parameter RunAsInvoker ne zagotavlja skrbniških pravic, ampak le blokira videz okna UAC.