Как запускать программу без Контроля учётных записей?

Как запускать программу без Контроля учётных записей?

29.04.2020 0 Автор GodKnowses

В одной из предыдущих статей блога мы разбирали тему запуска определённых программ без “назойливого” окна Контроля учётных записей. Что до меня, избавляться от этой “назойливости” отключением UAC полностью как функции я КРАЙНЕ не рекомендую. Несмотря на то, что система открыто позволяет это сделать, а настройки отключения Контроля находятся в, что называется, шаговой доступности, я не всегда порой понимаю, зачем Microsoft вообще позволяет это пользователям делать. Но, так или иначе, вопрос о том, как избежать появления окна для отдельных программ насущен. Так что вернёмся к этой теме и рассмотрим вопрос как запускать программу без окна Контроля учётных записей. В конце статьи маленькая видеоиллюстрация на тему, как всё это дело выглядит вживую.

Про что в статье?

Я позволю себе немного теории, чтобы вы сориентировались в происходящем. Также к статье будет приложен небольшой видеоролик, в котором описанное показано наглядно.

Как уже говорилось, мы рассмотрим два метода к решению вопроса. И тот и другой будут основаны на манипуляциях с переменными, позволяющими устанавливать “среды совместимости”. С настройками исполнительных файлов в этой части, думаю, сталкивался каждый. Проверьте контекстное меню любого исполнительного файла на примере установщика популярного архиватора:

вкладка совместимость исполнительного файла

В нашей ситуации мы будем использовать возможности корректировать переменные в последней части окна, позволяющие запуск программы от имени администратора и по отношению к пользователям. И для этого можно предложить несколько вариантов развития событий. Все они, как я сказал, крутятся вокруг переменной __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 отображать скрытые файлы и папки.

показывать скрытые файлы и папки в 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 из контекстного меню

Проверяйте. Всем успехов.