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

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

Мне нужно разрешить запуск этой программы из-под непривилегированного пользователя с подавлением запроса UAC. При этом не отключая контроль учетных записей полностью.
Это можно реализовать с помощью флага совместимости RunAsInvoker, который обеспечивает принудительный запуск приложения с теми же правами, что и родительское приложение, а появление окна UAC подавдяется. Т.е. например, при запуске приложения из проводника Windows (непривилегированный процесс), приложение будет также запущено в непривилегированном режиме.
Отключение 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 Administrator — 32-х и 64-х битная версия. Запустите версию Application Compatibility Administrator в зависимости от разрядности приложения, для которого вы хотите отключить запрос UAC.

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

В открывшемся окне нужно указать имя приложения, разработчика и путь к исполняемому файлу (
C:\Program Files\SpecAppO2\SpecAppO2.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:\ps\regedit.sdb
Если все сделали правильно, появится сообщение об успешном применении пакета.
Installation of regedit complete.

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

Попробуйте теперь запустить приложение в сессии обычного пользователя (без прав локального администратора). Теперь оно должно запуститься без появления запроса UAC.
Чтобы проверить, с какими привилегиями запущено приложение, откройте Task Manager и на вкладке процессов добавьте столбец Elevated. Убедитесь, что процесс вашего приложения запущен в непривилегированном режиме (
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

Можно создать такой параметр в реестре командой:
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 файла под пользователем, указанное приложение запустится без появления запроса 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\"\""

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

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

Теперь для запуска нужного приложения без запроса UAC, но с правами администратора, нужно выполнить (не обязательно под админом) команду:
schtasks /run /tn "\RunGeekAppElevated" /i

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

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


Тоже понадобился этот функционал для программы обновления клиента электронного документооборота.
Выручил импорт пользователям файла реестра:
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
«C:\\Program Files\\Папка\\Клиент\\cupdater.exe»=»RUNASINVOKER»
Спасибо за дополнение! Про эту возможность я подзабыл 🙂
Но в данном случае это решение для одного пользователя. Если нужно отключить UAC для программы у всех пользователей системы, по тому же принципу нужно создать параметр в ветке
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
К сожалению, вышеописанные операции не привели к нужному результату (т.е. ПО так и продолжало при запуске выдавать уведомление UAC). Пришлось воспользоваться программой Elevated Shortcut (запускает программу через штатный планировщик с галочкой «Выполнить с наивысшими полномочиями»). Не мытьем, так катаньем.
Можно, конечно и через планировщик… А какая версия и разрядность ОС?
А как именно это делается?
Что именно? Создание задания планировщика с галкой «Выполнить с наивысшими полномочиями»?
А можно более подробную инфу и разворачивании данного решения через ГП?
К сожалению если программу необходимо запускать «As Admin» данный способ не работает, все равно просит повышения прав. Как то можно отключить UAC для запуска приложения от админа?
Вы имеете в виду что приложение запускается из-под обычного пользователя?
Я работаю под учёткой доменного админа, однако имея права админа FAR по-умолчанию запускается с ограниченными правами. Чтобы нормально запустить FAR у меня в ярлыке стоит галка «Run As Admin», и в этом случае я получаю запрос от UAC на повышение прав. Если в Compatibility Toolkit выбрать только опцию RunAsInvoker, то фар всё равно запускается ограниченным, если поставть RunAsAdmin то получаю запрос UAC. Если выставить обе опции RunAsInvoker и RunAsAdmin одновременно, то срабатывает только RunAsInvoker, т.е. сообщение UAC я не получаю, но и FAR запускается не как админ.
Подскажите — на 8.1 тоже будет работать ???
Сори за офтоп,
везде как отключить,
А как исправить поломанный UAC?
Поднял ползунок до «всегда уведомлять», ни одного запроса,
до этого стояло: никогда не уведомлять.
Делал сброс: политик.
RD /S /Q «%WinDir%\System32\GroupPolicyUsers»
RD /S /Q «%WinDir%\System32\GroupPolicy»
gpupdate /force
Если дело не в доменных GPO и все приведенное не помогает, попробуйте импортировать на проблемный ПК ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
\CurrentVersion\Policies\System со здорового (должна быть )аналогичная версия ОС. Один раз таким способом получилось сбросить настройки UAC на дефолтные, после того, как один «продвинутый» человек через реестр систему наоптимизировал.
А если нужно чтобы программа, которая требует админских прав (но которая на самом деле может и без них прекрасно работать, типа старого софта) запускалась без окошка повышения прав и ввода административного пароля?
Пробовали по этой инструкции создать sdb файл? Ну или через реестр, как в комментариях описал Stanner | 21.04.2014.
По идее должно помочь.
Нет.
Пользовался таким батником для запуска setup.exe
cmd /min /C «set __COMPAT_LAYER=RUNASINVOKER && start «» «setup.exe»»
Для этого подойдёт метод из первого комментария. По сути он делает то-же самое, что ваш батник, только без батника
Жаль, но на Winodws 10 уже не работает
Установка запуска без контроля для OUTLOOK-2013 закончилась неудачей: запуск стал невозможен с сообщением: «Невозможно открыть окно программы. Невозможно открыть папки. Невозможно соединение с сервером,»
При повторном запуске Compatibility Administrator’a (32-bit) в списке установленных «Custom Databases» MSOutlook — отсутствовал!!!
Вернул всё к исходному удалением программ через Reg Organizer.
Подозреваю, что дело в длинных именах папок: вместо миленького
sdbinst -q c:\tools\regedit.sdb
sdbinst –u c:\tools\regedit.sdb
реальный путь к OUTLOOK.EXE C:\Program Files (x86)\Microsoft Office\OFFICE11
куда и был помещён MSOutlook.sdb
В результате команда а-ля ДОС не сработала при удалении, и, по-видимому, не сработала при инсталляции, хотя она прошла с сообщением об успешном применении пакета.
что за глупость я только что прочитал? RunAsInvoker всего лишь запускает приложение с теми же правами, что есть у родительского приложения! Никаких прав админа у обьічного пользователя или не elevated админ. акка трюк не даст ибо он придуман для решения проблем совместимости старьіх программ с новьіми версиями виндьі
Не проще подправить файл манифеста в exe файле через reshackera? Вместо всех этих костылей. Вместо админа ставим там RunAsInvoker, если файл имеет цифровую подпись лезем в гугл, качаем DeSign натравливаем на файл, сносим подпись и все работает.
Очень спасает изменение следующих параметров реестра:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem]
«ConsentPromptBehaviorAdmin»=dword:00000000
«ConsentPromptBehaviorUser»=dword:00000003
При этом UAC продолжает работать, если происходит запуск приложения, то надоедливое окно больше не выскакивает, а если из под пользователя нужно запустить с правами администратора, то это можно без проблем сделать по ПКМ, почему такой настройки нет штатно от майкрософт не понятно
Все значения параметров на скрине
дык, есть штатно. Тоже самое делает ползунок UserAccountControlSettings.exe
Огромное спасибо!!! Только этот вариант помог.
Application Compatibility Toolkit которая скачивается по ссылке в статье, на Win10 больше не работает.
Надо качать Windows ADK отсюда https://docs.microsoft.com/en-us/windows-hardware/get-started/adk-install и в ее составе уже будет эта рабочая утилита.
Спасибо за статью! Очень помгогла!
А можно более подробную инфу разворачивании данного решения через GPO?
Утилита sdbinst встроена в почледние версии Windows. Вам собственно нужно выполнить разово на всех компьютерах команду: sdbinst –u c:\tools\regedit.sdb.
Как вариант logon скрипт с UNC путек к sdb файлу на SYSVOL, либо можно скопировать файл на все компьютеры через Group Policy Preferences.
Воспользовался этой прогой, создал базу все дела и из программы этой нужное мне запускается и не из проги отдельное запускается, НО, первого же перезапуска компа. После новой загрузки ПК нужное мне снова просит отключить UAC (ну или запустить с правами админа). Тупость какая-то. И чтобы снова запустить нужное мне, нужно сначала запустить эту кривую хрень от мелкомягких (Compatibility Administrator), нажать в неё кнопку Run (для запуска нужного) и указать по новой путь (ещё один дебильный в ней косяк, она почему-то теряет полный путь к файлу, вместо этого пишет имя-файла.ехе), запустить то, что нужно, потом выйти из нужного (ибо этот кривой фиксер нужно выключить, с включенной нужной прогой этот фиксер не вырубить, мешает запущенное окошечко). Мелкомягкие не смогли даже свой фиксер подружить со своей же виндой, LoL и фейспалм…
И вот как с этой хренью бороться?
Спасибо, про приложение Compatibility Administrator знал когда боролся с программой сканирования на мфу xerox, а то что в реестре можно ключ прописать не знал
У меня не прокатил ни один из вариантов и именно для regedit.exe, а вот для 2-х других приложений – прокатило
2020, win 10. Сработало. Ура!
А мне загрузить эту програмку запрос пароля администратора мешает. Что делать?
Спасибо! Сработало! — как ни устанавливай — от админа запускается в итоге, а после проделанного гайда — запускается от пользователя =)
Здравствуйте. Спасибо за метод с батником.
С помощью .bat ПО запускается и без проблем обходит UAC. Но при запуске внутренних функций, требующих прав чтение/запись на диск снова всплывает UAC с требованием админского пароля, — если из прод ругой учетки, или просто подтверждения, — если работает админ. Как обойти?
Спасибо.
Как вариант попробовать поправить манифест файла — но я думаю что не поможет.
Ваше приложение скорее всего в процессе раоты дергает что-то в API, что вызывает запрос повышеня привелений.