Отключение UAC для определенной программы в Windows

В этой статье мы покажем, как в Windows выборочно отключить UAC (User Account Control) для определенной программы, не отключая службу контроля учетных записей полностью. Для подавления отображения запроса повышения привилегий UAC у приложения мы будет использовать флаг совместимости RunAsInvoker</strong>.

Система контроля учетных записей (User Account Control или UAC) запрашивает у пользователя подтверждение на выполнение любого действия, требующего прав администратора. Это довольно эффективный механизм защиты Windows от различных угроз (вирусы, трояны, черви, руткиты и т.п). Некоторый пользователей раздражает окно UAC и они полностью отключают контроль учетных записей, хотя Microsoft и специалисты в области ИБ категорически не рекомендуют делать это.

В моем случае я хочу отключить появления запроса User Account Control для произвольного приложения.

  • При запуске программы от имени учетной записи с правами администратора появляется запрос UAC на подтверждение запуска
  • Невозможен запуск программы от пользователя без прав администратора. Если программа запускается от имени пользователя, появляется окно запроса UAC для ввода пароля администратора

Мне нужно разрешить запуск этой программы из-под непривилегированного пользователя с подавлением запроса UAC. При этом не отключая контроль учетных записей полностью.

Это можно реализовать с помощью флага совместимости RunAsInvoker, который обеспечивает принудительный запуск приложения с теми же правами, что и родительское приложение, а появление окна UAC подавдяется. Т.е. например, при запуске приложения из проводника Windows (непривилегированный процесс), приложение будет также запущено в непривилегированном режиме.

Если программа требует прав администратора для запуска, т.к. меняет настройки системы или системные файлы, то при отключении для нее UAC, привилегии пользователя в приложении не повышаются. Программа все равно будет запускаться с правами текущего пользователя и, если у него нет полномочий на эти изменения, программа не сможет их внести. Также есть небольшое количество приложений, которые запускаются только в режиме “As administrator”, игнорирующие флаг совместимости RunAsInvoker.

Отключение UAC для программы с помощью Application Compatibility Toolkit

Нам понадобится утилита Application Compatibility Toolkit, которая входит в состав Windows ADK. Скачать актуальную версию ADK для Windows 11 и 10 можно здесь.

Запустите скачанный файл adksetup.exe и при установке (программе нужен доступ в Интернет) выберите только Application Compatibility Toolkit.

Или установите компонент командой:

adksetup.exe /features OptionId.ApplicationCompatibilityToolkit

Примечание. Пакет Microsoft Application Compatibility Toolkit используется для устранения проблем совместимости приложений при переходе на новые версии Windows.

В системе появится две версии Application Compatibility Administrator — 32-х и 64-х битная версия. Запустите версию Application Compatibility Administrator в зависимости от разрядности приложения, для которого вы хотите отключить запрос UAC.

Запустите утилиту Compatibility Administrator (32-bit) с правами администратора (!). В разделе Custom Databases, щелкните ПКМ по элементу New Database и выберите пункт Create New-> Application Fix.

В открывшемся окне нужно указать имя приложения, разработчика и путь к исполняемому файлу ( C:Program FilesSpecAppO2SpecAppO2.exe ).

Пропустите следующее окно мастера настройки (Compatibility Mode), нажав Next. В окне Compatibility Fixes отметьте опцию RunAsInvoker.

При желании можно убедиться, что приложение может работать без UAC, нажав на кнопку тестового запуска (Test Run).

В окне Matching Information можно указать какие параметры приложения нужно проверять при его запуске в режиме совместимости (ORIGINAL_FILENAME, версию, чексумму, размер, COMPANY_NAME и т.д.). В тестовой среде можно отключить все опции. Но в продуктивном окружении желательно настроить эти параметры для защиты от подмены файла.

Нажмите Finish и укажите имя файла, в который нужно сохранить созданный пакет исправления совместимости, например SpecAppO2_UAC_disabled.sdb . В этом файле будут содержаться инструкции по запуску приложения в режиме совместимости.

Осталось установить пакет с исправлением совместимости. Сделать это можно непосредственно из консоли Compatibility Administrator (выбрав в меню пункт Install).

Файл SpecAppO2_UAC_disabled.sdb можно передать на другие компьютеры с приложением и применить (установить) его из командной строки:

sdbinst -q c:psregedit.sdb

Если все сделали правильно, появится сообщение об успешном применении пакета.

Installation of regedit complete.

После установки пакета, соответствующая запись появится в списке установленных программ Windows.

Попробуйте теперь запустить приложение в сессии обычного пользователя (без прав локального администратора). Теперь оно должно запуститься без появления запроса UAC.

Чтобы проверить, с какими привилегиями запущено приложение, откройте Task Manager и на вкладке процессов добавьте столбец Elevated. Убедитесь, что процесс вашего приложения запущен в непривилегированном режиме ( Elevated=No ).

Чтобы удалить исправление совместимости, выполните команду:

sdbinst –u c:psregedit.sdb

Включить флаг RUNASINVOKER для программы через реестр

Windows может автоматически применять флаг совместимости RUNASINVOKER для определенных программ. Для этого в ветке реестра HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers нужно создать строковый параметр (REG_SZ) содержащий полный путь к EXE файлу программы:

  • Имя параметра: C:Program FilesSpecAppO2SpecAppO2.exe
  • Значение: RunAsInvoker

Можно создать такой параметр в реестре командой:

reg add "HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers" /v "полный_путь_к_приложению.exe" /t REG_SZ /d "RUNASINVOKER" /f

Если нужно включить режим совместимости приложения для всех пользователей компьютера, этот параметр нужно создать в ветке реестра: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers .

Теперь по умолчанию указанная программа будет всегда запускаться без запроса UAC, кроме случаев, когда запуск от имени администратора был выполнен принудительно.

Запуск приложения в режиме RunAsInvoker из командной строки

Есть еще вариант для запуск приложения без прав администратора и подавлением запроса UAC из командной строки (см. статью)

Для запуска программы с флагом совместимости RunAsInvoker из командной строки можно использовать такую команду:

cmd /C "set __COMPAT_LAYER=RunAsInvoker && start "" "C:Program FilesSpecAppO2SpecAppO2.exe""

Или создайте BAT со следующим кодом:

Set ApplicationPath= C:Program FilesSpecAppO2SpecAppO2.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"

При запуске этого bat файла под пользователем, указанное приложение запустится без появления запроса UAC.

Можно создать простой REG файл, применив который вы добавите в контекстное меню всех программ опцию запуска без повышения привилегий.

Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*shellforcerunasinvoker] @="Run without privilege elevation" [HKEY_CLASSES_ROOT*shellforcerunasinvokercommand] @="cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" "%1"""

Теперь, щелкнув по любому приложению вы можете использовать опцию Run without privilege elevation.

Используем планировщик заданий для запуска приложения без запроса UAC

Еще один вариант запуска приложения без запроса UAC возможен за счет использования планировщика задания Windows. Он позволит убрать окно запроса повышения привилегий UAC, но фактически всегда запускать приложения с правами администратора в режиме Elevated. В отличии от других способов, этот способ будет работать только в сессии пользователя с правами администратора.

Идея в том, чтобы создать задание запуска программы в Task Scheduler, с включенной опцией Run with highest privileges.

Это задание можно создать вручную из графической консоли taskschd.msc, но проще использовать готовую команду для генерации такого задание. Откройте командную строку с правами админа и выполните:

schtasks /create /tn "RunGeekAppElevated" /tr "'C:Program FilesGeek Uninstallergeek.exe'" /SC ONCE /ST 12:00 /RL HIGHEST /F

Теперь для запуска нужного приложения без запроса UAC, но с правами администратора, нужно выполнить (не обязательно под админом) команду:

schtasks /run /tn "RunGeekAppElevated" /i

Для удобства, можно создать ярлык с этой командой на рабочем столе пользователя.

Проверьте, что программа запускается с правами админа ( Elevated=Yes ), но окно запроса контроля учетных записей не появляется.

Итак, мы рассмотрели, как отключить UAC для конкретной программы без полного отключения контроля учетных записей на компьютере. Это позволит вам запускать программы Windows под обычным пользователем без появления запроса UAC и без пароля администратора.


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *