Mnoho programů vyžaduje při spouštění zvýšení práv (ikona štítu pro ikonu), aby však správně fungovaly, nepotřebují administrátorská práva (například jste ručně udělili potřebná práva uživatelům do programového adresáře v programových souborech a do větví registru používaných programem). Proto při spuštění takového programu zpod jednoduchého uživatele, pokud je v počítači povoleno řízení uživatelských účtů, se objeví žádost UAC a uživatel bude muset zadat heslo správce. Chcete-li tento mechanismus obejít, mnozí jednoduše deaktivují UAC nebo udělují administrátorským právům uživatele v počítači jejich přidání do skupiny místních správců. Obě tyto metody jsou samozřejmě nebezpečné..
Obsah:
- Proč běžná aplikace může vyžadovat administrátorská práva
- Spuštění programu, který vyžaduje práva správce od běžného uživatele
- Proměnná prostředí __COMPAT_LAYER a parametr RunAsInvoker
Proč běžná aplikace může vyžadovat administrátorská práva
Oprávnění správce může být požadováno, aby program upravoval určité soubory (protokoly, konfigurace atd.) Ve své vlastní složce v C: \ Program Files (x86) \ SomeApp). Ve výchozím nastavení nemají uživatelé oprávnění upravovat tento adresář, pro normální provoz takového programu jsou vyžadována administrátorská práva. Chcete-li tento problém vyřešit, musíte ručně přiřadit právo modifikovat / zapisovat uživateli (nebo skupině Users) do programové složky pod administrátorem na úrovni NTFS.
Poznámka:. Ve skutečnosti je praxe ukládání změn aplikačních dat ve vlastním adresáři v C: \ Program Files nesprávná. Správnější je ukládat aplikační data do uživatelského profilu. Ale tato otázka už je o lenivosti a nekompetentnosti vývojářů.Spuštění programu, který vyžaduje práva správce od běžného uživatele
Již dříve jsme popsali, jak můžete zakázat požadavek UAC pro konkrétní program pomocí parametru RunAsInvoker. Tato metoda však není dostatečně flexibilní. RunAs můžete také použít s heslem správce / SAVECRED (také nebezpečné). Zvažte jednodušší způsob, jak vynutit spuštění libovolného programu bez administrátorských práv (a bez zadání hesla správce) s povoleným UAC (4,3 nebo 2 úroveň posuvníku UAC).
Vezměte si například nástroj pro úpravy registru - regedit.exe (je umístěn v adresáři C: \ windows \ system32). Při spuštění regedit.exe se zobrazí okno UAC a pokud nepotvrdíte zvýšení oprávnění, editor registru se nespustí.
Vytvořte soubor na ploše run-as-non-admin.bat s následujícím textem:
cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% 1"
Nyní, chcete-li vynutit, aby aplikace běžela bez administrátorských práv a potlačila požadavek UAC, stačí přetáhnout požadovaný soubor exe do tohoto souboru bat na ploše.
Poté by měl editor registru začít bez požadavku UAC. Otevřete správce procesů a přidejte sloupec Zvýšená (S vyšší úrovní oprávnění) uvidíte, že systém má proces regedit.exe s neexpandovaným stavem (spuštěný uživatelskými právy).
Zkuste upravit jakýkoli parametr ve větvi HKLM. Jak vidíte, přístup k úpravám registru v této větvi je odepřen (tento uživatel nemá oprávnění k zápisu do větví systémového registru). Můžete však přidávat a upravovat klíče ve své vlastní větvi registru uživatelů - HKCU.
Podobně můžete spustit soubor bat a konkrétní aplikaci, stačí zadat cestu ke spustitelnému souboru.
run-app-as-non-admin.bat
Set ApplicationPath = "C: \ Program Files \ MyApp \ testapp.exe"
cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% ApplicationPath%"
Můžete také přidat místní nabídku, která přidává možnost spuštění všech aplikací bez zvýšení oprávnění. Chcete-li to provést, vytvořte následující reg soubor a importujte jej do registru.
Editor registru systému Windows verze 5.00
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker]
@ = "Spustit jako uživatel bez zvýšení UAC"
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker \ command]
@ = "cmd / min / C \" set __COMPAT_LAYER = RUNASINVOKER && start \ "\" \ "% 1 \" \ ""
Poté spustíte jakoukoli aplikaci bez administrátorských práv, stačí vybrat „Spustit jako uživatel bez zvýšení UAC"v místní nabídce.
Proměnná prostředí __COMPAT_LAYER a parametr RunAsInvoker
Proměnná prostředí __COMPAT_LAYER vám umožňuje nastavit různé úrovně kompatibility aplikací (karta Kompatibilita ve vlastnostech souboru exe). Pomocí této proměnné můžete určit nastavení kompatibility, se kterými bude program spuštěn. Chcete-li například spustit aplikaci v režimu kompatibility s Windows 7 a rozlišením 640 × 480, nastavte:
set __COMPAT_LAYER = Win7RTM 640x480
Zajímavé možnosti proměnné __COMPAT_LAYER zdůrazňujeme následující parametry:
- RunAsInvoker - spuštění aplikace s oprávněními nadřazeného procesu bez požadavku UAC.
- RunAsHighest - spuštění aplikace s maximálními právy, která má uživatel k dispozici (žádost UAC se objeví, pokud má uživatel práva správce).
- Runasadmin - spuštění aplikace s administrátorskými právy (vždy se objeví požadavek AUC).
I.e. parametr RunAsInvoker neposkytuje práva správce, ale pouze blokuje vzhled okna UAC.