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

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


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

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

  • При запуске программы от имени учетной записи с правами администратора появляется запрос UAC на подтверждение запускаЗапрос повышения привелегий 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

установка Application Compatibility Toolkit

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

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

Application Compatibility Administrator

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

create application fix

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

создать файл совместимости для приложения

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

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

compatibility fix - RunAsInvoker

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

Matching Information папаметры файла совместимостиsovmestimostu

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

Сохранить sdb файл совместимости

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

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

sdbinst -q c:\ps\regedit.sdb

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

Installation of regedit complete.

sdbinst

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

sdb файл в установленных приложениях Windows

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

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

запуск приложения под обычным пользователем - без UAC, elevated = no

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

sdbinst –u c:\ps\regedit.sdb

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

Windows может автоматически применять флаг совместимости RUNASINVOKER для определенных программ. Для этого в ветке реестра HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers нужно создать строковый параметр (REG_SZ) содержащий полный путь к EXE файлу программы:

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

Создать в реестре AppCompatFlags фикс runasinvoker для конкретного приложения

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

reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "полный_путь_к_приложению.exe" /t REG_SZ /d "RUNASINVOKER" /f

Если нужно включить режим совместимости приложения для всех пользователей компьютера, этот параметр нужно создать в ветке реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers .

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

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

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

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

cmd /C "set __COMPAT_LAYER=RunAsInvoker && start "" "C:\Program Files\SpecAppO2\SpecAppO2.exe""

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

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

BAT файл с параметром RUNASINVOKER

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

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

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

REG файл: добавить пункт запуска программы без UAC в проводик

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

Новый пункт меню в проводнике Run without privilege elevation

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

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

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

Задание планировщика - запустить приложение с опцией Run with highest privileges

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

schtasks /create /tn "\RunGeekAppElevated" /tr "'C:\Program Files\Geek Uninstaller\geek.exe'" /SC ONCE /ST 12:00 /RL HIGHEST /F

schtasks: команда создания задания планировщика запуска программы с правами админа но подавлением UAC

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

schtasks /run /tn "\RunGeekAppElevated" /i

Ярлык запуска задания без запрося контроля учетных записей

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

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

Диспетчер задач: проверяем что приложение запущено с максимальными правами но без uac запросов

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


Предыдущая статья Следующая статья


Комментариев: 36 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)