Многие программы при запуске требуют повышения прав (значок щита у иконки), однако на самом деле для их нормальной работы прав администратора не требуется (например, вы вручную предоставили необходимые права пользователям на каталог программы в ProgramFiles и ветки реестра, которые используются программой). Соответственно, при запуске такой программы из-под простого пользователя, если на компьютере включен контроль учетных записей, появится запрос UAC и от пользователя потребует ввести пароль администратора. Чтобы обойти этот механизм многие просто отключают UAC или предоставляют пользователю права администратора на компьютере, добавляя его в группу локальных администраторов. Естественно, оба этих способа небезопасны.
Зачем обычному приложению могут понадобится права администратора
Права администратора могут потребоваться программе для модификации неких файлов (логи, конфигурации и т.д.) в собственной папке в C:\Program Files (x86)\SomeApp). По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора. Чтобы решить эту проблему, нужно под администратором на уровне NTFS вручную назначить на папку с программой право на изменение/запись для пользователя (или группы Users).
Запуск программы, требующей права администратора от обычного пользователя
Ранее мы уже описывали, как можно отключить запрос UAC для конкретной программы, с помощью параметра RunAsInvoker. Однако этот метод недостаточно гибкий. Также можно воспользоваться RunAs с сохранением пароля админа /SAVECRED (также небезопасно). Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном UAC (4,3 или 2 уровень ползунка UAC).
Для примера возьмем утилиту редактирования реестра — regedit.exe (она находится в каталоге C:\windows\system32). При запуске regedit.exe появляется окно UAC и, если не подтвердить повышение привилегии, редактор реестра не запускается.
Создадим на рабочем столе файл run-as-non-admin.bat со следующим текстом:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
Теперь для принудительного запуска приложения без права администратора и подавления запроса UAC, просто перетащите нужный exe файл на этот bat файл на рабочем столе.
После этого редактор реестра должен запустится без появления запроса UAC. Открыв диспетчер процессов, и добавим столбец Elevated (С более высоким уровнем разрешений), вы увидите, что в системе имеется процесс regedit.exe с неповышенным статусом (запущен с правами пользователя).
Попробуйте отредактировать любой параметр в ветке HKLM. Как вы видите доступ на редактирование реестра в этой ветке запрещен (у данного пользователя нет прав на запись в системные ветки реестра). Но вы можете добавлять и редактировать ключи в собственной ветке реестра пользователя — HKCU.
Аналогичным образом можно запускать через bat файл и конкретное приложение, достаточно указать путь к исполняемому файлу.
run-app-as-non-admin.bat
Set ApplicationPath="C:\Program Files\MyApp\testapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
Также можно добавить контекстное меню, которое добавляет у всех приложений возможность запуска без повышения прав. Для этого создайте следующий 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» в контекстном меню.
Переменная окружения __COMPAT_LAYER и параметр RunAsInvoker
Переменная окружения __COMPAT_LAYER позволяет устанавливать различные уровни совместимости для приложений (вкладка Совместимость в свойствах exe файла). С помощью этой переменной можно указать настройки совместимости, с которыми нужно запускать программу. Например, для запуска приложения в режиме совместимости с Windows 7 и разрешением 640×480, установите:
set __COMPAT_LAYER=Win7RTM 640x480
Из интересных нам опций переменной __COMPAT_LAYER выделим следующие параметры:
- RunAsInvoker — запуск приложения с привилегиями родительского процесса без запроса UAC.
- RunAsHighest — запуск приложения с максимальными правами, доступными пользователю (запрос UAC появляется если у пользователя есть права администратора).
- RunAsAdmin — запуск приложение с правами администратора (запрос AUC появляется всегда).
Т.е. параметр RunAsInvoker не предоставляет права администратора, а только блокирует появления окна UAC.
Хороооошая статья.
Лишь бы юзера не нее не натолкнулись.
Потом головняка не оберешься. 😀
Согласен, статья хорошая, спасибо автору.
Думаю, особого серьезного головняка не будет, так как это можно сказать «открыть что-либо с правами на чтение». Скажем если пользователь таким образом сможет открыть в mmc.exe консоль «Local Users and Groups», то добавить себя в какую-либо группу все равно не сможет.
Да, все правильно. При ограниченных правах пользователя он все равно ничего не сможет сделать деструктивного.
Задача была как раз в подавлении запроса UAC для программ, которым права админа в принципе не нужны (либо нужны только при первом запуске / настройке). Многие просто, чтобы не разбираться с проблемой, дают пользователю права админа.
Трюк с RunAsInvoker — это вполне рабочий обходной маневр для запуска таких программ без необходимости повышения прав пользователя.
поздно
Любопытная статья.
Выделил текст, хотел распечатать на принтере (из оперы).
Но не тут то было… Печатает только первые 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 так установится?