Многие программы при запуске требуют повышения прав (значок щита у иконки), однако на самом деле для их нормальной работы права администратора не требуется (например, вы можете вручную предоставить необходимые права пользователям на каталог программы в ProgramFiles и ветки реестра, которые используются программой). Соответственно, если на компьютере включен контроль учетных записей, то при запуске такой программы из-под непривилегированного пользователя появится запрос UAC и Windows потребует от пользователя ввести пароль администратора. Чтобы обойти этот механизм многие просто отключают UAC или предоставляют пользователю права администратора на компьютере, добавляя его в группу локальных администраторов. Microsoft не рекомендует использовать такие методы, т.к. это снижает безопасность компьютера.
Зачем обычному приложению могут понадобится права администратора?
Права администратора могут потребоваться программе для модификации некоторых файлов (логи, файлы конфигурации и т.д.) в собственной папке в C:\Program Files (x86)\SomeApp). По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора. Чтобы решить эту проблему, нужно войти на компьютер под администратором и вручную предоставить пользователю (или встроенной группе Users) права на изменение/запись для этого каталога на уровне файловой системы NTFS.
Запуск программы, требующей права администратора, от обычного пользователя
Ранее мы уже описывали, как можно с помощью параметра RunAsInvoker отключить запрос UAC для конкретной программы. Однако этот метод недостаточно гибкий.
Также можно воспользоваться RunAs с сохранением пароля админа
/SAVECRED
в диспетчере паролей Windows (Credentials Manager). Это также небезопасно, т.к. пользователь может использовать сохранённый пароль учетной записи администратора для запуска других программ.
Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном 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 10 запустился непривилегированный процесс 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
Переменная окружения __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 10 показывает значок щита 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 и убедитесь, что программа использует внешний файл манифеста, в котором указано, что нужно запускаться без прав администратора.
Хороооошая статья.
Лишь бы юзера не нее не натолкнулись.
Потом головняка не оберешься. 😀
Согласен, статья хорошая, спасибо автору.
Думаю, особого серьезного головняка не будет, так как это можно сказать «открыть что-либо с правами на чтение». Скажем если пользователь таким образом сможет открыть в mmc.exe консоль «Local Users and Groups», то добавить себя в какую-либо группу все равно не сможет.
Да, все правильно. При ограниченных правах пользователя он все равно ничего не сможет сделать деструктивного.
Задача была как раз в подавлении запроса UAC для программ, которым права админа в принципе не нужны (либо нужны только при первом запуске / настройке). Многие просто, чтобы не разбираться с проблемой, дают пользователю права админа.
Трюк с RunAsInvoker — это вполне рабочий обходной маневр для запуска таких программ без необходимости повышения прав пользователя.
поздно
Доброе время и суток, нужна помощь!!! У меня нету логина и пароля суперпользователя, но хочу установить одну программу у меня диск не разделён и все хранится там. Создал .bat файл и вписал код cmd /min /C «set __COMPAT_LAYER=RUNASINVOKER && start «» %1″, но годна хочу начесать установку, программа ругается, говорит, что нельзя установить на С диск, ПОМОГИТЕ!!! Есть ли какая нибудь альтернатива ???
Спасибо заранее !
Установите программу на рабочий стол.
Любопытная статья.
Выделил текст, хотел распечатать на принтере (из оперы).
Но не тут то было… Печатает только первые 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/2012/11/09/sbros-parolya-v-windows-8/
Не работает. Бросаю установщик для ITopVPN на этот «батник» и ничего. Как вылазил запрос пароля админа, так и вылазит.
Вы не понимаете для чего это нужно. Этот сценарий не обходит UAC для приложений которым действительно нужны права админа. Здесь решения для обхода запроса UAC, когда реально пользователю не нужны права админа, а запрос выскакивает, мешая запустить приложение.
Ребятушки программисты, а на черта мне все эти заморочки.
Я обычный пенсионер.Скачал браузер полегче,(старый ноутбук)
начал устанавливать ФИГА. Каких там прав нет чёрт их знает.
И мне что, надо теперь остаток жизни посветить программированию.
Вставил флешку, переустановил и плевать на уаки маки буераки.