Некоторые программы при запуске могут требовать повышения прав до администратора (значок щита у иконки), однако на самом деле для их нормальной работы права администратора не требуется (например, вы можете вручную предоставить необходимые NTFS разрешения пользователям на каталог программы в Program Files и ее ветки реестра). Если на компьютере включен контроль учетных записей (User Account Control), то при запуске такой программы из-под непривилегированного пользователя появится запрос UAC и Windows потребует от пользователя ввести пароль администратора. Чтобы обойти этот механизм многие просто отключают UAC или предоставляют пользователю права администратора на компьютере, добавляя его в группу локальных администраторов. Оба эти способа не рекомендуется широкого использовать, т.к. вы снижаете безопасность и защиту Windows. В этой статье мы рассмотрим, как запустить программу, которая требует права администратора, от имени простого пользователя и подавить запрос повышения привилегий UAC.
Предоставить пользователю права на запуск программы
Программа может запрашивать права администратора при запуске, если:
- Программе нужно получить доступ на системный каталог или файл, на отсутствуют NTFS разрешения для непривилегированных пользователей;
- Если программа собрана со специальным флагом, которые требует повышения прав при запуске (requireAdministrator).
В первом случае для решения проблемы администратору достаточно предоставить RW или Full Control разрешения на каталог программы или необходимый системных каталог. Например, программа хранит свои файлы (логи, файлы конфигурации и т.д.) в собственной папке в C:\Program Files (x86)\SomeApp) или каком-то системном каталоге. Для корректной работы программы пользователю нужны права записи в эти файлы. По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора.
Чтобы разрешить запуск программы под непривилегированным пользователем администратора достаточно вручную предоставить пользователю (или встроенной группе Users) права на изменение/запись на файл/каталог на уровне файловой системы NTFS.
Чтобы найти список файлов, папок и ключей реестра, к которым обращается программа, воспользуйтесь утилитой Process Monitor (https://learn.microsoft.com/en-us/sysinternals/downloads/procmon). Включите фильтр по имени процесса программы и найдите все ресурсы, при доступе к которым появляется Access Denied. Предоставьте необходимые права на папки/файлы/ветки реестра.
Запуск программы, требующей права администратора, от обычного пользователя
Ранее мы уже описывали, как можно с помощью параметра RunAsInvoker отключить запрос UAC для конкретной программы. Однако этот метод недостаточно гибкий.
Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном UAC (4,3 или 2 уровень ползунка UAC).
Для примера возьмем утилиту редактирования реестра — regedit.exe (она находится в каталоге C:\windows\). Обратите внимание на щит UAC у иконки. Данный значок означает, что для запуска этой программы будет запрошено повышение привилегий через UAC.
Если запустить
regedit.exe
, то перед вами появится окно User Account Contol с запросом пароля пользователя с правами администратора на этом компьютере (
Do you want to allow this app to make changes to your device?
). Если не указать пароль и не подтвердить повышение привилегии, приложение не запустится.
Попробуем обойти запрос UAC для этой программы. Создайте на рабочем столе файл run-as-non-admin.bat со следующим текстом:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
Теперь для принудительного запуска приложения без прав администратора и подавлением запроса UAC, просто перетащите нужный exe файл на этот bat файл на рабочем столе.
Редактор реестра должен запуститься без появления запроса UAC и без ввода пароля администратора. Откройте диспетчер процессов, добавьте столбец Elevated и убедитесь, что в Windows запушен непривилегированный процесс regedit (запущен с правами пользователя).
Попробуйте отредактировать любой параметр в ветке HKEY_LOCAL_MACHINE. Как вы видите доступ на редактирование реестра в этой ветке запрещен (у данного пользователя нет прав на запись в системные ветки реестра). Но вы можете добавлять и редактировать ключи в собственной ветке реестра пользователя — HKEY_CURRENT_USER.
Аналогичным образом через bat файл можно запускать и конкретное приложение, достаточно указать путь к исполняемому файлу.
run-app-as-non-admin.bat
Set ApplicationPath="C:\Program Files\MyApp\testapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
Также можно добавить контекстное меню, которое добавляет у всех приложений возможность запуска без повышения прав. Для этого создайте файл runasuser.reg файл, скопируйте в него следующий код, сохраните и импортируйте его в реестр двойным щелчком по reg файлу (понадобятся права администратора).
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker] @="Run as user without UAC elevation" [HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command] @="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""
После этого для запуска любого приложения без прав админа достаточно выбрать пункт “Run as user without UAC elevation” в контекстном меню проводника Windows File Explorer.
Запуск программы в режиме RunAsInvoker из командной строки
Переменная окружения __COMPAT_LAYER позволяет устанавливать различные уровни совместимости для приложений (вкладка Совместимость в свойствах exe файла). С помощью этой переменной можно указать настройки совместимости, с которыми нужно запускать программу. Например, для запуска приложения в режиме совместимости с Windows 7 и разрешением 640×480, установите:
set __COMPAT_LAYER=Win7RTM 640x480
Из интересных нам опций переменной __COMPAT_LAYER можно выделить следующие параметры:
- RunAsInvoker — запуск приложения с привилегиями родительского процесса без запроса UAC;
- RunAsHighest — запуск приложения с максимальными правами, доступными пользователю (запрос UAC появляется, если у пользователя есть права администратора);
- RunAsAdmin — запустить приложение с правами администратора (запрос AUC появляется всегда).
Следующие команды включат режим RUNASINVOKER для текущего процесса и запускает указанную программу:
set __COMPAT_LAYER=RUNASINVOKER
start "" "C:\Program Files\MyApp\testapp.exe"
Включить режим RunAsInvoker в манифесте exe файла программы
Как мы уже говорили выше, Windows показывает значок щита UAC у программ, которые требуют повышенных привилегий для запуска. Это требование разработчики задают при разработке в специальной секции программы — манифесте.
Вы можете отредактировать манифест исполняемого exe файла программы и отключить требование запускать программу в привилегированном режиме.
Для редактирования манифеста программы можно использовать бесплатную утилиту Resource Hacker. Откройте исполняемый файл программы в Resource Hacker.
В дереве слева перейдите в раздел Manifest и откройте манифест программы. Обратите внимание на строки:
<requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges>
Именно благодаря опции requireAdministrator Windows всегда запускает эту программу с правами администратора.
Измените requireAdministrator на asInvoker и сохраните изменения в exe файле.
Обратите внимание, что теперь у иконки программы пропал щит UAC и вы можете запустить ее без запроса прав администратора с привилегиями текущего пользователя.
В этом случае можно заставить программу использовать внешний файл манифеста. Создайте в каталоге с ехе файлом текстовый файл
app.exe.manifest
(например Autologon.exe.manifest) и скопируйте в него код манифеста из Resource Hacker. Измените requireAdministrator на asInvoker. Сохраните файл.
Чтобы Windows при запуске приложений всегда пробовала использовать внешний файл манифеста, включите специальный параметр реестра:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f
Перезагрузите Windows и убедитесь, что программа использует внешний файл манифеста, и запускается без прав администратора.
Запуск программы с сохраненным паролем администратора
Если способы запуска программы через режим RunAsInvoker не работают для вашего устаревшего приложения, можно попробовать запускать такие программы в сессии пользователя с помощью сохраненного пароля администратора. Этот способ мы целенаправленно оставили последним, т.к. это наименее безопасный способ запуска программ без предоставления прав локального администратора пользователю.
Создайте на рабочем столе новый ярлык для запуска программы. Укажите имя компьютера, имя локального администратора и полный путь к исполняемому файлу программы.
Например:
runas /user:wks-1122h2\root /savecred "C:\CorpApp\myapp.exe"
Запустите ярлык под пользователем. При первом запуске откроется командная строка, в которой нужно будет указать пароль администратора.
Утилита RunAs при запуске с параметром /SAVECRED сохраняет имя пользователя и пароль в диспетчере паролей Windows (Credentials Manager).
При следующем запуске ярлыка утилита runas автоматически получит сохраненный пароль из Credentials Manager и использует его для запуска программы от имени указанного локального администратора (пароль не запрашивается повторно при каждом запуске).
Вы можете вывести список пользователей с сохраненными паролями в Credential Manager с помощью команды:
RunDll32.exe keymgr.dll,KRShowKeyMgr
В Windows 11 при запуске такого ярлыка появляется ошибка:
RUNAS ERROR: Unable to run - C:\CorpApp\myapp.exe 740: The requested operation requires elevation.
Чтобы исправить ошибку, отредактируйте команду в свойствах ярлыка. Замените ее на:
C:\Windows\System32\runas /profile /user:WKS-1122H2\root /savecred "cmd.exe /C C:\CorpApp\myapp.exe"
Как мы указывали выше, использование параметра
/savecred
не безопасно, т.к. пользователь, в чьем профиле сохранен чужой пароль может использовать его для запуска любой программы или команды под данными привилегиями, или даже сменить пароль пользователя с правами администратора. Кроме того, сохраненные пароли из Credential Manager можно получить в открытом виде с помощью утилит типа Mimikatz, лучше <запретить использование сохраненных паролей.
Преодолеть недостаток использования сохраненного пароля через runas позволяют несколько сторонних утилит. Например, AdmiLink, RunAsRob, RunAsSpc. Эти программы позволяют сохранить пароль администратора в зашифрованном виде и безопасно запустить программу с правами администратора. Эти утилиты проверяют при запуске путь и контрольную сумму исполняемого файла и не позволят запустить произвольную программу.
Хороооошая статья.
Лишь бы юзера не нее не натолкнулись.
Потом головняка не оберешься. 😀
Согласен, статья хорошая, спасибо автору.
Думаю, особого серьезного головняка не будет, так как это можно сказать «открыть что-либо с правами на чтение». Скажем если пользователь таким образом сможет открыть в mmc.exe консоль «Local Users and Groups», то добавить себя в какую-либо группу все равно не сможет.
Да, все правильно. При ограниченных правах пользователя он все равно ничего не сможет сделать деструктивного.
Задача была как раз в подавлении запроса UAC для программ, которым права админа в принципе не нужны (либо нужны только при первом запуске / настройке). Многие просто, чтобы не разбираться с проблемой, дают пользователю права админа.
Трюк с RunAsInvoker — это вполне рабочий обходной маневр для запуска таких программ без необходимости повышения прав пользователя.
поздно
Доброе время и суток, нужна помощь!!! У меня нету логина и пароля суперпользователя, но хочу установить одну программу у меня диск не разделён и все хранится там. Создал .bat файл и вписал код cmd /min /C «set __COMPAT_LAYER=RUNASINVOKER && start «» %1″, но годна хочу начесать установку, программа ругается, говорит, что нельзя установить на С диск, ПОМОГИТЕ!!! Есть ли какая нибудь альтернатива ???
Спасибо заранее !
Установите программу на рабочий стол.
Рабочий стол пользователя и все его данные находятся на C диске по этому это не поможет
Как я понял, это просто для дурных программ которые без нужды требуют права администратора. Вот почему бы юзеру и не подредактировать свой реестр без риска попортить что то важное для системы?
Любопытная статья.
Выделил текст, хотел распечатать на принтере (из оперы).
Но не тут то было… Печатает только первые 3 страницы. 🙁
От принтера не зависит, от броузера тоже. В хроме предлагает распечатать ещё меньше — 2 страницы.
Как обойти этот глюк ? Есть ли возможность нормально распечатать ВСЮ статью ?
С остальными статьями на этом сайте та же нераспечатывабельная беда…
А в чем проблема выделить все, вставить в Word и напечатать? У меня работает)
Сменить браузер?
🙂
В FF с печатью тоже беда 🙁 Тут похоже верстальщика пряморукого надо.
Воспользуйтесь расширением для chrome print friendly & pdf. Рекомендую удобно сохранять статьи в pdf или сразу печатать
«Для этого создайте следующий reg файл и экспортируете его в реестр»
Думаю, все-таки импортировать 🙂
Ну да 🙂
Лучше это пользователю не показывать.
Разрешать только средствами GPO
Куст HKEY_CURRENT_USER
Путь к разделу Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
Имя параметра .exe
Тип параметра REG_SZ
Значение RUNASINVOKER
Как бы наоборот заставить в WIN 10 запускать диспетчер задач от имени админа.
Попробуйте параметр совместмимости RunAsAdmin. Например так:
Set ApplicationPath="C:\Windows\System32\Taskmgr.exe""
cmd /min /C "set __COMPAT_LAYER=RunAsAdmin && start "" %ApplicationPath%"
с Taskmgr получилось.
с Set ApplicationPath=»C:\Windows\ImmersiveControlPanel\SystemSettings.exe»»
нет.
и
«» Панель настройки можно вызвать командой: start ms-settings: В теории можно запустить командную строку из под админа и выполнить эту команду.»»
не даёт повышенных прав.
Подскажите, так же интересует данный вопрос с целью заблокировать запуск системных приложений и спец.ПО (например КриптоПро)
Вам заблокировать? Используйте SRP (https://winitpro.ru/index.php/2016/10/21/blokirovka-virusov-i-shifrovalshhikov-s-pomoshhyu-software-restriction-policies/) или Applocker.
А как импортировать файл реестра?
Воу, воу, воу… Завтра попробую эту фишку у себя на предприятии. Задолбался я уже с этими тупыми программами бороться, которые требуют права администратора на запуск. Есть у нас компьютерный класс с программой экзамены в ГИБДД, эта падла требует права админа на запуск :\
Я устал ее бегать запускать. Не могу же я классу информатики дать права админа. Там детки мне быстро все сломают с правами админа. И не только эта программа мне мозг скребет. И кстати… AdminLink внезапно не работает 🙁
Горе програмисты, у которых все работает только под админом — это дйствительно беда….
Ммм… кстати, а можно как то скрыть выполнения скрипта? Чтобы CMD не мелькало?
И еще, как то может через GPO это грамотно организовать? Я чет не могу придумать.
Сейчас я как сделал.
Я положил скрипт в папку с программой (указал на запуск exe из этой папки), сделал его ярлык на рабочем столе, сделал его скрытым и только на чтение, подменил его название на название программы и сделал такую же иконку как у программы, чтобы батник не сильно отсвечивал.
Сейчас хочу это провернуть через GPO
Можно запускать bat файл из VBS скрипта в скрытом режиме.
Например файл some.vbs:
CreateObject("Wscript.Shell").Run "C:\Users\root\Desktop\run-as-non-admin.bat",0,True
Через GPO вы можете легко раскопировать файлы и ярлыки пользвотелям
«Не могу же я классу информатики дать права админа.»
А почему бы и нет. если одна программа то ладно если у вас всё накатывается как снежный ком,
то может изменить структуру и попробовать что то вроде Shadow Defender , а нужное хранить на сетевом диске или диске Д.
Ещё вроде это не знаю может есть в WIN 10 nj;t/ https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-7/gg176676(v=ws.10)
смысл что что бы не творили ученики при перезагрузке всё вернётся в исходное состояние.
Есть софт, который нормально запускается и работает без прав админа, но при установке обновлений права админа уже требуются. Обновление загружается во временную папку, название этой временной папки всегда разное. Как сделать так чтобы при установке новой версии софта не выводился запрос UAC на запуск от админа?
Из вашего сообщения какое-то рабочее решение предложить трудно. Обновление выполняется отдельным процессом? Кто его запускает? Кроме того, не понятно, что конкретно делает обновление. Возможно ему действительно нужны повышенные привелегии.
Как вариант, можно отследить с помошью FileMon, RegMon в какие папки и файлы лезет исполняемый файл обновления и дать RW права на эти ветки/папки пользователю.
Выбивает при перетаскивании ЕХЕшника ошибку, мол невозможно найти «с/имяпользователя». Что делать?
Возможно имя каталога с профилем пользователя содержит пробелы или другие спец символы.
Ты мой герой! рабоатет!
1 способ не работает. Всё равно появляется UAC
Не работает. Тестирование на regedit — чушь.
Пусть афтор попробует так запустить, например, Win10Tweaker.
Такие выкрутасы нужны для всяких специфических программ и утилит, а не для обыденного regedit.
Фтопку.
Вы не понимаете для чего это нужно. Этот сценарий не обходит UAC для приложений которым действительно нужны права админа. Здесь решения для обхода запроса UAC, когда реально пользователю не нужны права админа, а запрос выскакивает, мешая запустить приложение.
а где эта папка myapp?
Там же, где кнопка «ANY KEY». На самом деле вместо этой папки надо указать папку своего приложения. Соответственно путь тоже может быть произвольным.
А драйвер на wi-fi так установится?
Спасибо за статью и ваши труды!
Такой вопрос есть некоторый софт например тот же скайп который не обновляется без прав админа. Как то можно выдать права только на установку определенного софта и их обновлений ?
Наверно, только вариант с централизованным обновлением через GPO, SCCM, Logon — скрипты или подобные штуки…
скайп из мсстора не обновляется без прав админа?
А как сделать запуск службы с правами пользователя? Что только не пробовал, не стартует и все тут.
Если я правильно вас понял, нужно добавить учетку пользователя в политику Log on as a service:
Control Panel -> Administrative Tools -> Local Security Policy -> Local Policies -> User Rights Assignment > Log on as a service
а как запустить программу понизив права? я локальный админ, прога хочет запускаться только под юзером (по факту ей никакие права не нужны), доп. юзера создавать и скакать с с юзера на юзера не хочу…
У __COMPAT_LAYER подобной опции нет. Придется создавать отдельного юзера.
А как запустить приложение от имени администратора, точнее обойти этот UAC, не имея прав админа? Очень нужно.
Есть клас хакерских программ про bypass uac. Погуглите.
Но я так понимаю вам это не поможет, т.к. задача несколько иная.
Добрый день, ни один из способов, к сожалению, почему-то не работает. А в манифесте и так стоит asinvoker, может быть там нужно еще какой-нибудь параметр сменить?
Вот текст манифеста, если нужен:
true
А всё, на сайте программы написано, что она работает исключительно с правами админа
Помогите пожалуйста.Был пароль администратора учетной записи пользователей. Ребенок что то нажал и вместо администратора стал общий доступ. Когда пытаешься допустим очистить диск С , выскакивает иконка «контроль учетных записей пользователей» и какой то пароль. Я естественно пароля не знаю , т.как ребенок написал что то. И многие действия в ноутбуке ограничены. Нельзя удалить,скачать и зайти в некоторые папки и файлы. Т.как нужен администратор.
Вам нужно сбросить пароль локального админа и после этого добавить свою учетку в локальную группу Администраторы.
Хотя бы так:
https://winitpro.ru/index.php/2022/12/07/sbros-parolya-v-windows/
Не работает. Бросаю установщик для ITopVPN на этот «батник» и ничего. Как вылазил запрос пароля админа, так и вылазит.
Вы не понимаете для чего это нужно. Этот сценарий не обходит UAC для приложений которым действительно нужны права админа. Здесь решения для обхода запроса UAC, когда реально пользователю не нужны права админа, а запрос выскакивает, мешая запустить приложение.
Ребятушки программисты, а на черта мне все эти заморочки.
Я обычный пенсионер.Скачал браузер полегче,(старый ноутбук)
начал устанавливать ФИГА. Каких там прав нет чёрт их знает.
И мне что, надо теперь остаток жизни посветить программированию.
Вставил флешку, переустановил и плевать на уаки маки буераки.
Можно еще через планировщик задач запускать с сохраненным паролем.
Не подскажите, как? Я пробовал, но что-то не работает. Настроил запуск программы с правами администратора при входе конкретного простого пользователя, задачу создал от имени админской учетки, сохранил пароль.
Программа не может использоваться на вашем ПК. Надеялся на последний вариант
Не подскажете, есть ли возможность использовать пользовательский интерфейс WireGuard из под пользователя?
Стим таким способом получится скачать на рабочем пк, который находится в домене
Как вариант, можно запускать программы из планировщика с включенной опцией Run with highest privileges. Это также не вызвет окна на повышение прав. По крайней мере с PS1 скриптами это работает.