
Как запускать программу без Контроля учётных записей?
29.04.2020В одной из предыдущих статей блога мы разбирали тему запуска определённых программ без «назойливого» окна Контроля учётных записей. Там мы разбирали вариант обхода Контроля для конкретной программы с помощью Планировщика заданий. Таким методом пользуются сами программы ещё на этапе собственной установки в Windows (например, программа очистки CCleaner). Что до меня, избавляться от этой «назойливости» отключением UAC полностью как функции я КРАЙНЕ не рекомендую. Несмотря на то, что система открыто позволяет это сделать, а настройки отключения Контроля находятся в, что называется, шаговой доступности, я не всегда порой понимаю, зачем Microsoft вообще позволяет это пользователям делать. Но, так или иначе, вопрос о том, как избежать появления окна для отдельных программ насущен. Так что вернёмся к этой теме и рассмотрим вопрос как запускать программу без окна Контроля учётных записей. В конце статьи маленькая видеоиллюстрация на тему, как всё это дело выглядит вживую.
Про что в статье?
- Переменные среды
- Причём здесь App-V?
- Обходим UAC батником
- Модернизируем ярлык программы для обхода UAC
- Добавим для обхода UAC специальный пункт в контекстное меню файлов
Я позволю себе немного теории, чтобы вы сориентировались в происходящем. Как уже говорилось, мы рассмотрим два метода к решению вопроса. И тот и другой будут основаны на манипуляциях с переменными, позволяющими устанавливать «среды совместимости». С настройками исполнительных файлов в этой части, думаю, сталкивался каждый. Проверьте контекстное меню любого исполнительного файла на примере установщика популярного архиватора:
В нашей ситуации мы будем использовать возможности корректировать переменные в последней части окна, позволяющие запуск программы от имени администратора и по отношению к пользователям. И для этого можно предложить несколько вариантов развития событий. Все они, как я сказал, крутятся вокруг переменной __COMPAT_LAYER. Есть несколько опций для уточнения настроек, о которых следует помнить. Во вкладке они пере нами, а в качестве флагов для будущих команд они представлены так:
- 256Color — 8-ми разрядный цвет (256)
- 640×480 — Запуск с разрешением 640×480
- DisableThemes — Отключение визуальных эффектов
- Win98 — Запустить программу в режиме совместимости с Windows 98/Windows ME
- Win2000 — Запустить программу в режиме совместимости с Windows 2000
- WINXPSP3 — Запустить программу в режиме совместимости с Windows XP
- VistaSP2 — Запустить программу в режиме совместимости с Windows Vista
- Win7RTM — Запустить программу в режиме совместимости с Windows 7
- Win8RTM — Запустить программу в режиме совместимости с Windows 8
и т.д. С полным списком опций можно ознакомиться здесь. Таким образом, назначение переменной для конкретного случая выглядело бы примерно так:
set __COMPAT_LAYER=Win2000 640x480
Установленные настройки будут существовать до тех пор, пока есть сама переменная __COMPAT_LAYER. И переменную можно убить, остановив исполнение консольной команды, где она была прописана. Либо вручную направив «пустую» команду конкретному исполнительному файлу в виде
set __COMPAT_LAYER=
Такой подход к запуску любого исполнительного файла позволяет использовать один из самых интересных вариантов исключения окна Контроля учётных записей с помощью простого батника. То бишь batch-скрипта. Т.е. скрипт вы запустили, окно UAC не появилось. Но повторный запуск программы вновь заставит окно Контроля появиться как ни в чём не бывало, предотвращая несанкционированный запуск. Таким образом, окно UAC не появляется ИМЕННО тогда, когда это нужно пользователю.
Откуда растут ноги или кусок теории про App-V
Microsoft App-V, она же функция виртуализации приложений — компонент серверных и настольных операционных систем, функция которых разделять и изолировать устанавливаемые извне приложения со стороны от самой ОС-и и остальных программ. Программа «перехватывается» системой и динамически (в режиме онлайн) обрабатывается для показа пользователю. В нашем случае используется одна из главных возможностей функции App-V (но далеко не единственных) — Совместимость приложений различных поколений для одной и той же платформы. И от версии к версии системы менялся подход самой App-V по отношению к устанавливаемым в Windows программам. Так, в Windows XP, не имея административных прав, пользователь с некоторыми программами полноценно вообще работать не мог. А вот со времён появления Vista все приложения обязали использовать файл-манифест, уточняющий запрашиваемый уровень прав. Среди них были:
- asInvoker — запуск с ограниченными правами до момента, пока расширенные права не затребуются отдельной командой или со стороны другого запущенного от имени администратора процесса.
- highestAvailable — административный уровень; нужны права администратора, если пользователь админ; если пользователь не принадлежит к административной группе, доступ к функциям программы и её возможностям будет ограничен.
- requireAdministrator — требует административных прав; программа вообще не запустится, пока ей не предоставятся права.
В общем, учитывая тот факт, что редкая программа использовала «безобидные» функции и никуда по закоулкам системы не лазала, мало что в Windows можно запустить без предоставления ей расширенных прав. Т.е. минуя окно UAC. Частично решить этот вопрос и было призвано добавление переменой к пакету __COMPAT_LAYER=RunAsInvoker. Она заставляла систему отпихивать в сторону запрашиваемый уровень прав в виртуальной среде операндом asInvoker. К слову сказать, примерно такие же возможности достигаются утилитами SigCheck и Process Explorer от Sysyinternals. А с помощью Resource Hacker манифест можно просматривать напрямую. Но не суть.
СРАЗУ
Установка переменной __COMPAT_LAYER (первые символы — двойное подчёркивание) не повышает уровень ваших привилегий до административных. Если у вашей учётной записи таковых не имеется. Она именно не позволяет появиться окну Контроля и разрешает программе запуститься от имени любого пользователя. Таким образом использование перемененной безопасно до тех пор, пока некто не заполучит чудесным образом права Администратора. Так что любая вариация с переменными RunAsHighest (заставит UAC появиться, если права Администратора есть) или RunAsAdmin (инициирует окно Контроля всегда) относительно безопасны.
Как запускать программу без Контроля учётных записей с помощью батника?
Суть метода заключается в следующем. Каждая из запускаемых программ будет проходить процедуру присвоения переменных в режиме совместимости. Назначать вручную мы ничего не станем. Для этого подойдут возможности командной консоли, в среде которой выбранное приложение и запустится. Для этого:
- открываем Блокнот и вводим код:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" "%1""
закроем его, присвоив произвольное имя, но с расширением .bat. Чтобы так сделать, вам придётся заставить Windows отображать скрытые файлы и папки.
Или скачать готовый приготовленный мною батник в архиве по ссылке:
Скачать архив с бат-файлом Запуск без UAC
Распакуйте и расположите его на Рабочем столе. Суть работы с ним проста: зацепите ярлык нужного файла .exe и перетащите на распакованный батник. Программа запустится без окна предупреждения со стороны Контроля учётных записей. Способ не всегда срабатывает при обращении к ярлыкам, созданным именно системой (в момент установки программы) из-за витиеватых настроек символьных ссылок. Потому, кому такой способ придется по душе, советую создать ярлык на рабочем столе самостоятельно с указанием на Расположение объекта. Либо воспользоваться другими способами.
Как запускать программу без Контроля учётных записей с ярлыка?
Команду выше можно применять для конкретной программы, скорректировав путь в ярлыке к ней. Для этого в поле адреса ярлыка добавим слева
cmd.exe /c SET __COMPAT_LAYER=RunAsInvoker & START «»
Т.е. вместо, допустим
"C:\Program Files\VS Revo Group\Revo Uninstaller Pro\RevoUninPro.exe"
Должно стать:
C:\Windows\System32\cmd.exe /c SET __COMPAT_LAYER=RunAsInvoker & START "" "C:\Program Files\VS Revo Group\Revo Uninstaller Pro\RevoUninPro.exe"
По необходимости смените значок ярлыка, поискав подходящий в папке с этой программой.
Вариант три: настройки реестра
С той же целью вы можете прописать в контекстном меню исполнительных файлов особый пункт. Назовём его, скажем, Запуск без окна UAC.
Для этого в текстовом редакторе типа NotePad++ (Window-возный Блокнот не подойдёт для русской локали) пропишите вот этот код:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Запуск без окна UAC"
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /whatever /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""
Сохраните файл с расширением .reg. Если соберётесь прописать контекстный пункт вручную с помощью:
- NotePad++ и ему подобного на русском, укажите кодировку Windows-1251
- Блокнота, задайте в поле команды @=»Запуск без окна UAC» вместо указанного имя типа «No_UAC», чтобы контекстное меню выглядело без кракозябров:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="No_UAC"
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /whatever /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""
Если от пункта устанете или ошибётесь на первых порах в названии, удалите параметр из cmd от имени администратора:
reg delete HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker
Как всегда, можете скачать готовый вариант reg-файла с К76 в архиве:
Скачать Запуск программы без UAC из контекстного меню
Проверяйте. Всем успехов.