Запуск программы без прав администратора и подавлением запроса UAC
Многие программы при запуске требуют повышения прав (значок щита у иконки), однако на самом деле для их нормальной работы прав администратора не требуется (например, вы вручную предоставили необходимые права пользователям на каталог программы в ProgramFiles и ветки реестра, которые используются программой). Соответственно, при запуске такой программы из-под простого пользователя, если на компьютере включен контроль учетных записей, появится запрос UAC и от пользователя потребует ввести пароль администратора. Чтобы обойти этот механизм многие просто отключают UAC или предоставляют пользователю права администратора на компьютере, добавляя его в группу локальных администраторов. Естественно, оба этих способа небезопасны.
Зачем обычному приложению могут понадобится права администратора
Права администратора могут потребоваться программе для модификации неких файлов (логи, конфигурации и т.д.) в собственной папке в C:Program Files (x86)SomeApp). По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора. Чтобы решить эту проблему, нужно под администратором на уровне NTFS вручную назначить на папку с программой право на изменение/запись для пользователя (или группы Users).
. На самом деле практика хранения изменяющихся данных приложения в собственном каталоге в C:Program Files неверна. Правильнее хранить данные приложения в профиле пользователя. Но это вопрос уже о лени и некомпетентности разработчиков.
Запуск программы, требующей права администратора от обычного пользователя
Ранее мы уже описывали, как можно отключить запрос UAC для конкретной программы, с помощью параметра RunAsInvoker. Однако этот метод недостаточно гибкий. Также можно воспользоваться RunAs с сохранением пароля админа /SAVECRED (также небезопасно). Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном UAC (4,3 или 2 уровень ползунка UAC).
Для примера возьмем утилиту редактирования реестра — regedit.exe
(она находится в каталоге C:windowssystem32). При запуске 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 FilesMyApptestapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
Также можно добавить контекстное меню, которое добавляет у всех приложений возможность запуска без повышения прав. Для этого создайте следующий reg файл и импортируйте его в реестр.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT*shellforcerunasinvoker]
@="Run as user without UAC elevation"
[HKEY_CLASSES_ROOT*shellforcerunasinvokercommand]
@="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.
Запуск программы требующий права администратора под учетной записью обычного пользователя
Windows 10, Windows 7, Windows 8, Windows Server, Windows Vista, Windows XP
- Recluse
- 12.04.2016
- 6
- 07.03.2019
В любом предприятии, в котором компьютеры/программное обеспечение обслуживают адекватные люди, обычные пользователи компьютеров не имеют никаких админских прав за ними, что значительно снижает риск удаления важных файлов системы, установку непонятного программного обеспечения и прочих чудес. Однако, некоторые программы упорно не желают работать без прав администратора — и что же делать, если желания давать права администратора компьютера пользователю нет, а необходимость запустить приложение — есть?
Речь пойдет о двух способах — более-менее безопасном (Выдача прав на папку с программой), и менее безопасном (способ с использованием программы RunAs).
Выдача прав на папку с программой
Часто, права администратора требуются программе для проведения каких-либо операций с файлами в своей папке — например некой Programm’e нужно записывать данные в свой файл конфигурации в папку, куда она установлена (допустим этот каталог C:Program Files (x86)Programma
). Можно попробовать выдать нужным пользователям полные права на эту папку. Делается это следующим образом:
- Правой кнопкой нажимаете на папке, открываете Свойства
- В Свойствах нужно открыть вкладку Безопасность
. - В зависимости от настроек компьютера там может отображаться либо «Добавить
«, либо «Изменить
«. В первом случае нужно нажать кнопку «Добавить
«, во втором — «Изменить
«, после чего скорее всего потребуется ввести данные учетной записи администратора. После этого появится окно с кнопкой «Добавить
«, которую и нужно будет нажать. - После нажатия кнопки «Добавить
» добавляем всех нужных пользователей. Для проверки правильность ввода имени пользователя можно воспользоваться кнопкой «Проверить имена
«. - Затем выдаем полные права добавленному пользователю — для этого нужно поставить галочку в поле «Разрешения для….
«, пункт «Полные права
«.
Запуск программы под учетной записью админстратора с учетной записи обычного пользователя
Для этой цели сгодится программа RunAs, которая идет в составе Windows. Для удобства её использования проще всего будет создать cmd файл, в который следует поместить следующее:
C:WINDOWSsystem32runas.exe /user: /SAVECRED
Вместо Домена пользователя и Пользователя вводим данные учетной записи пользователя, который обладает правами администратора в домене, или на компьютере (в таком случае, вместо Домена пользователя следует писать имя компьютера). Вместо Путь к программе соответственно пишем путь к нужному exe файлу.
Сохраняем этот файл, и запускаем. Если все прошло верно, то при первом запуске bat файла, будет запрошен пароль для указанного пользователя, однако уже при повторном запуске никакого запроса пароля не потребуется — для этого используется параметр /SAVECRED
.
Оценить статью