Стартиране на програма без права на администратор и потискане на UAC заявка

Много програми изискват повишаване на правата при стартиране (иконата на екрана на иконата), но всъщност те не изискват права на администратор, за да функционират нормално (например ръчно сте предоставили необходимите права на потребителите на директорията на програмата в ProgramFiles и клоновете на системния регистър, които се използват от програмата). Съответно, когато стартирате такава програма от един прост потребител, ако контролът на акаунта на потребителския акаунт е активиран на компютъра, ще се появи UAC заявка и потребителят ще трябва да въведе парола за администратор. За да заобиколят този механизъм, мнозина просто деактивират UAC или дават потребителски права на администратора на компютъра, добавяйки ги към групата на местните администратори. Естествено и двата метода са опасни..

Съдържание:

  • Защо редовното приложение може да се нуждае от права на администратор
  • Изпълнение на програма, която изисква права на администратор от обикновен потребител
  • __COMPAT_LAYER променлива среда и параметър RunAsInvoker

Защо редовното приложение може да се нуждае от права на администратор

Може да се изискват права на администратор, за да може програмата да променя определени файлове (дневници, конфигурации и т.н.) в собствената си папка в C: \ Program Files (x86) \ SomeApp). По подразбиране потребителите нямат разрешение да редактират тази директория, съответно за нормалната работа на такава програма са необходими администраторски права. За да разрешите този проблем, трябва ръчно да присвоите правото на промяна / запис на потребителя (или Групата потребители) на програмната папка под администратора на ниво NTFS.

забележка. Всъщност практиката да се съхраняват променящи се данни в приложението в собствената му директория в C: \ Program Files е неправилна. По-правилно е да съхранявате данни за приложения в потребителски профил. Но този въпрос вече се отнася до мързела и некомпетентността на разработчиците.

Изпълнение на програма, която изисква права на администратор от обикновен потребител

По-рано описахме как можете да деактивирате UAC заявката за конкретна програма, като използвате параметъра RunAsInvoker. Този метод обаче не е достатъчно гъвкав. Можете също да използвате RunAs с паролата на администратора / SAVECRED (също опасно). Помислете за по-прост начин да накарате всяка програма да стартира без права на администратор (и без въвеждане на администраторска парола) с активиран UAC (4.3 или 2 ниво на плъзгача на UAC).

Например вземете помощната програма за редактиране на системния регистър - regedit.exe (намира се в директорията C: \ windows \ system32). Когато стартирате regedit.exe, се появява прозорецът на UAC и ако не потвърдите повишаването на привилегията, редакторът на системния регистър не се стартира.

Създайте файл на работния плот тичам-като-не-admin.bat със следния текст:

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

Сега, за да принудите приложението да се стартира без администраторски права и да потиснете UAC заявката, просто плъзнете желания EXE файл към този файл на прилеп на работния плот.

След това редакторът на системния регистър трябва да стартира без UAC заявка. Отворете мениджъра на процеси и добавете колона издигнат (С по-високо ниво на разрешения) ще видите, че системата има regedit.exe процес с неразширен статус (стартиран с правата на потребителя).

Опитайте да редактирате всеки параметър в клона на HKLM. Както можете да видите, достъпът за редактиране на системния регистър в този клон е отказан (този потребител няма разрешения за запис в клоновете на системния регистър). Но можете да добавяте и редактирате ключове в собствения си клон на потребителския регистър - HKCU.

По същия начин можете да стартирате bat файл и конкретно приложение, просто посочете пътя към изпълнимия файл.

навечерието на приложението, както-не-admin.bat

Задайте ApplicationPath = "C: \ програмни файлове \ MyApp \ testapp.exe"
cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% ApplicationPath%"

Можете също да добавите контекстно меню, което добавя възможността всички приложения да се изпълняват без повишаване на разрешенията. За целта създайте следния reg файл и го импортирайте в системния регистър.

Версия на редактора на системния регистър на Windows 5.00
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker]
@ = "Изпълнение като потребител без повишение на UAC"
[HKEY_CLASSES_ROOT \ * \ shell \ forcerunasinvoker \ команда]
@ = "cmd / min / C \" set __COMPAT_LAYER = RUNASINVOKER && start \ "\" \ "% 1 \" \ ""

След това, за да стартирате всяко приложение без права на администратор, просто изберете „Изпълнете като потребител без повишение на UAC"в контекстното меню.

__COMPAT_LAYER променлива среда и параметър RunAsInvoker

Променливата на средата __COMPAT_LAYER ви позволява да задавате различни нива на съвместимост за приложения (раздел съвместимост в свойствата на exe файла). Използвайки тази променлива, можете да определите настройките за съвместимост, с които да стартирате програмата. Например, за да стартирате приложението в режим на съвместимост с Windows 7 и резолюция 640 × 480, задайте:

набор __COMPAT_LAYER = Win7RTM 640x480

От интересните опции за променливата __COMPAT_LAYER, ние открояваме следните параметри:

  • RunAsInvoker - стартиране на приложение с привилегии на родителския процес без UAC заявка.
  • RunAsHighest - стартиране на приложението с максимално достъпни права за потребителя (заявката за UAC се появява, ако потребителят има права на администратор).
  • RunAsAdmin - стартиране на приложението с права на администратор (AUC заявка винаги се появява).

Т.е. параметърът RunAsInvoker не предоставя администраторски права, а само блокира появата на прозореца на UAC.