В этой статье мы покажем, как выборочно отключить UAC для определенного приложения, не отключая полностью эту службу User Account Control. Рассмотрим несколько способов отключения контроля учетных записей для приложениия с помощью флага совместимости RunAsInvoker.
Флаг RunAsInvoker позволяет запустить приложение с маркером, унаследованным от родительского процесса. При этом отменяется обработка манифеста приложения, и обнаружение процессов установщика. Данный параметр не предоставляет права администратора, а только блокирует появление окна UAC.
В качестве примера мы отключим появление запроса User Account Control для редактора реестра (regedit.exe). Несмотря на то, что у моей учетной записи есть права администратора, при запуске утилиты все равно появляется запрос UAC на подтверждение запуска.
Отключение UAC для программы с помощью Application Compatibility Toolkit
Нам понадобится утилита Application Compatibility Toolkit, которая входит в состав Windows ADK. Скачать актуальную версию Windows ADK для Windows 10 можно здесь.
Запустите скачанный файл adksetup.exe и при установке (программе нужен доступ в Интернет) выберите только Application Compatibility Toolkit.
В системе появится две версии Application Compatibility Administrator — 32-х и 64-х битная версия. Запустите версию Application Compatibility Administrator в зависимости от разрядности приложения, для которого вы хотите подавить запрос UAC.
Запустите утилиту Compatibility Administrator (32-bit) с правами администратора (!). В разделе Custom Databases, щелкните ПКМ по элементу New Database и выберите пункт Create New-> Application Fix.
В открывшемся окне нужно указать имя приложения (regedit), производителя (Microsoft) и путь к исполняемому файлу (
C:\Windows\regedit.exe
).
Пропустите следующее окно мастера настройки (Compatibility Mode), нажав Next. В окне Compatibility Fixes отметьте опцию RunAsInvoker.
При желании можно убедиться, что приложение может работать без UAC, нажав на кнопку тестового запуска (Test Run).
В окне Matching Information вы можете указать какие параметры приложения нужно проверять (версию, чексумму, размер и т.д.). Я оставил включенными проверки COMPANY_NAME,PRODUCT_NAME и ORIGINAL_FILENAME, чтобы не пересоздавать файл исправления после очередного обновления Windows 10 и обновлении версии файла regedit.
Нажмите Finish и укажите имя файла, в который нужно сохранить созданный пакет исправления совместимости, например regedit.sdb. В этом файле будут содержаться инструкции по запуску приложения с заданными опциями совместимости.
Осталось применить пакет с исправлением совместимости к вашему приложению. Сделать это можно непосредственно из консоли Compatibility Administrator (выбрав в меню пункт Install), либо из командной строки.
Для этого откройте командную строку с правами администратора и выполните команду:
sdbinst -q c:\ps\regedit.sdb
Если все сделали правильно, появится сообщение об успешном применении пакета.
Installation of regedit complete.
После установки пакета, соответствующая запись появится в списке установленных программ Windows (Programs and Features).
Попробуйте теперь запустить приложение в сессии пользователя без прав локального администратора. Теперь оно должно запуститься без появления запроса UAC.
Теперь проверьте, с какими привилегиями запущено данное приложение. Для этого в Task Manager на вкладке процессов добавьте столбец “Elevated”. Убедитесь, что процесс regedit.exe запущен от пользователя в непривилегированном режиме (
Elevated=No
).
В таком процесс редактора реестра пользователь может редактировать только собственные ветки реестра, но при попытке отредактировать/создать что-то в системной HKLM, появляется ошибка “You don’t have the requisite permissions”.
В дальнейшем это исправление совместимости можно распространить на компьютеры пользователей с помощью групповых политик. Тем самым можно добиться отключения проверки системы контроля учетных записей (UAC) для определенных приложений на множестве компьютеров в домене Active Directory.
Чтобы удалить исправление совместимости, выполните команду
sdbinst –u c:\ps\regedit.sdb
Включить флаг RUNASINVOKER для программы через реестр
В Windows 10/8.1/7 вы можете включить флаг совместимости RUNASINVOKER через реестр. Флаг совместимости приложения можно выставить для одного пользователя или для всех пользователей компьютера:
Например, для regedit нужно в ветке реестра HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers создать новый строковый параметр (REG_SZ) вида:
- Value name: C:\windows\regedit.exe
- Value data: RunAsInvoker
Если нужно включить режим совместимости приложения для всех пользователей компьютера, этот параметр нужно создать в ветке реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers.
В домене можно распространить эти настройки реестра пользователям через GPO.
Bat файл для запуска приложения в режиме RunAsInvoker
Есть еще вариант для запуск приложения без прав администратора и подавлением запроса UAC (см. статью).
Просто создайте bat файл со следующим кодом:
Set ApplicationPath="C:\windows\regedit.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
При запуске этого bat файла под пользователем, указанное приложение запустится без появления запроса UAC.
Итак, мы рассмотрели, как отключить 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, что вызывает запрос повышеня привелений.