net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Когда вы пытаетесь запустить .bat файл на компьютере с операционной системой Windows, вы можете столкнуться с сообщением “У вас нет прав доступа для выполнения этой операции”. Это происходит потому, что .bat файлы требуют прав администратора для запуска на компьютере.
Однако, существует несколько способов запустить .bat файлы без сообщения о правах администратора.
Скачивая программы с сайтов разработчиков или других источников, вы, наверное, не раз замечали, что одни из исполняемых файлов этих программ имеют на себе характерную иконку щита, а другие нет. Что это означает? А означает это следующее: если исполняемый файл программы или её ярлык на рабочем столе отмечен этим жёлто-голубым значком, значит данная программа требует прав администратора. В связи с этим у многих пользователей возникает вопрос: а можно ли каким-то образом обойти это ограничение и установить/запустить программу в обычной учётной записи пользователя? Ответ на него будет зависеть от того, для каких целей разрабатывалась программа и с какими объектами файловой системы ей предстоит работать.
Любой пользователь Windows может запустить в своей сессии программу от имени другого пользователя
с помощью Run As
. Благодаря этому вы можете выполнить скрипт (.bat, .cmd, .vbs, .ps1), запустить исполняемый .exe файл или установку приложения (.msi, .cab) с полномочиями другого пользователя.
Например, вы можете использовать RunAs для установки программ или запуска программ/скриптов/MMC оснасток с правами администратора непосредственно в сессии обычного непривилегированного пользователя. Также через RunAs вы можете запустить приложение, настроенное в профиле другого пользователя (приложение загрузится с настройки из профиля другого пользователя).
За возможность запуска программ от имени другого пользователя в Windows отвечает служба Вторичный вход в систему
(Secondary Log-on). Если эта служба остановлена, тогда все описанные методы runas работать не будут. Вы можете проверить, что служба запущена с помощью следующей команды PowerShell
:
В Windows есть несколько способов запустить программу или процесс от имени другого пользователя.
Команда RUNAS – запуск приложения от имени другого пользователя Windows .
RunAS
Запуск из командного файла приложений от имени Администратора без запроса UAC.
Формат командной строки RUNAS:
RUNAS /trustlevel:уровень доверия программа
Параметры командной строки:
/noprofile
– Не загружать профиль пользователя. Это приводит к более быстрой загрузке приложения, но может стать причиной неправильной работы некоторых приложений.
/profile
– Загружать профиль пользователя. Этот параметр установлен по умолчанию.
/env
– Использовать текущие параметры среды.
/netonly
– Учетные данные предназначены только для удаленного доступа.
/savecred
– Использовать учетные данные, сохраненные пользователем. Этот вариант не доступен в выпусках Windows 7 Домашняя или Windows 7 Начальная и будет проигнорирован.
/smartcard
– Для указания учетных данных используется смарт-карта.
/showtrustlevels
– Отобразить список уровней доверия, которые можно использовать в качестве аргументов параметра /trustlevel.
/trustlevel
– Значение “уровень доверия” должно быть перечислено в списке уровней доверия.
программа
– Командная строка для EXE. См. примеры ниже.
runas /showtrustlevel
– отобразить уровни доверия, существующие в системе. В ответ будет отображаться перечень в виде:
В системе доступны следующие уровни доверия:
0x20000 (Обычный пользователь)
Кроме значения trustlevel равного 0x20000
можно пользоваться значениями 0x10000
, соответствующему минимальному набору привилегий и 0x40000
, стандартному для данного пользователя набору.
Для просмотра отличий разных уровней доверия можно воспользоваться командой Whoami
, выполняя ее в сеансе командного процессора, запускаемого с каждым из уровней trustlevel
runas /trustlevel:0x20000 cmd.exe
– запустить командный процессор cmd.exe с использованием уровня доверия, полученного в предыдущем примере.
runas /trustlevel:0x40000 cmd.exe
– запустить командный процессор cmd.exe с использованием стандартного уровня доверия.
Примечание: в сеансе командной строки, запущенной с использованием параметра /trustlevel, список привилегий соответствующий каждому уровню доверия можно получить с использованием команды whoami /priv
,
а полные сведения об учетной записи – whoami /ALL
Примечание: параметр /profile
несовместим с параметром /netonly
.
Примечание: параметр /savecred
несовместим с параметром /smartcard
.
Для запуска приложений от имени администратора с использованием runas.exe
необходимо изменить стандартные настройки безопасности системы:
– включить учетную запись Администратора ( по умолчанию, она отключена);
– задать пароль для пользователя Администратор
;
whoami
/priv
whoami
Пароли, запоминаемые при использовании утилиты RUNAS. EXE с параметром /savecred можно
изменить или удалить с помощью оснастки управления сохраненными паролями:
При наборе ключевых значений нужно соблюдать регистр символов.
Для управления сохраненными учетными записями в командной строке Windows используется утилита
CMDKEY. EXE
Весь список команд CMD Windows
Запуск программы от имени другого пользователя из Проводника Windows (File Explorer)
Примечание
. Если пункт меню « Запуск от имени другого пользователя
» отсутствует, см. следующий раздел.
В появившемся окне Windows Security нужно указать имя и пароль пользователя, под чьей учетной записью нужно запустить программу и нажать кнопку ОК
.
- Если нужно запустить программу от имени пользователя Active Directory, нужно указать его имя в формате userPrincipalName
(
[email protected]
) или samAccountName (
DomainName\UserName
);
- Если ваш компьютер добавлен в домен AD, то для запуска программы от имени локальной учетной записи пользователя ее имя нужно указать в формате:
.\localusername
.
Важно
. Вы можете запустить программу от имени другого пользователя только, если для него задан пароль. Использовать Runas для пользователя с пустым паролем не получится.
Откройте Диспетчер задач и убедитесь, что приложение запущенно под указанным пользователем.
Как установить программу без прав администратора
В действительности многие из таких программ прекрасно могут работать без прав администратора, если владельцем компьютера им предоставлены соответствующие разрешения на папку Program Files и используемые ими ветки реестра. Являясь же обычным пользователем, вы можете устанавливать и запускать только те программы, которые не используют системный каталог ProgramFiles, если же вы запустите установочный файл приложения, требующего повышенных прав, то, во-первых, автоматически сработает UAC (контроль учётных записей), во-вторых, на экране появится окно с запросом пароля администратора.
Отключение админом UAC не решает проблемы, поскольку устанавливаемая программа всё равно попросит вас ввести пароль администратора. Что можно предпринять в этой ситуации? Воспользоваться функцией, или правильнее сказать, уровнем прав текущего пользователя AsInvoker, подавляющим UAC и сообщающим программе, что она может запуститься с привилегиями родительского процесса, то есть буквально с теми правами, которые имеются на данный момент у пользователя. Но «может» ещё не означает, что она действительно запустится, ведь привилегии в системе AsInvoker не повышает.
Если в файле манифеста программы чётко прописано, что запускаться/устанавливаться программа должна исключительно с правами администратора, то AsInvoker не поможет. Так, нам так и не удалось установить системный настройщик Winaero Tweaker, а если бы и удалось, мы бы всё равно не смогли им пользоваться. Теперь, когда вы приблизительно знаете, как это работает в теории, перейдём к решению поставленной задачи на практике. Всё очень просто. Создайте Блокнотом обычный текстовый файл и вставьте в него следующий код:
Использование AsInvoker в учётной записи администратора
И в завершении хотелось бы сказать пару слов о том, что AsInvoker даёт администратору. Когда вы работаете в учётной записи администратора, все программы запускаются с правами вашей учётной записи (не путайте это, пожалуйста, с запуском программ от имени администратора, то есть с повышением привилегий в рамках одной учётной записи).
А теперь предположим, что у вас есть программа, которой вы не хотите предоставлять права вашей учётной записи. Чтобы не создавать обычную учётную запись, вы можете воспользоваться функцией. Чтобы продемонстрировать разницу между запущенной обычным способом программой (в примере использовался штатный редактор реестра) и той же программой, запущенной через скрипт с прописанным в нём уровнем прав родительского процесса, мы добавили в Диспетчер задач дополнительную колонку «С повышенными правами».
В первом случае напротив процесса в этой колонке указано «Да», а во втором — нет, то есть редактор реестра запустился с пониженными привилегиями. Поскольку запущенный в таком режиме regedit утрачивает часть своих полномочий, некоторые ключи реестра окажутся недоступными для редактирования. Это же касается любой другой программы. Не имея соответствующих прав, такая программа, если она окажется небезопасной, уже не сможет перезаписать важные системные файлы и ключи реестра.
Запуск программ от имени из командной строки
В Windows есть консольная утилита runas.exe
, которую можно использовать для запуска приложений от имени другого пользователя из командной строки. Также команда runas позволяет сохранить пароль пользователя в Windows Credential Manager, чтобы его не приходилось набирать каждый раз.
Совет
. Если имя пользователя содержит пробелы, его нужно взять в кавычки:
Можно, например, открыть панель управления под другим пользователем:
Введите пароль для corp\server_admin: Попытка запуска C:\Windows\notepad.exe C:\tmp\2871997x64.txt от имени пользователя "corp\server_admin" .
Если указали несуществующее имя пользователя или неверный пароль, появится ошибка:
RUNAS ERROR: Unable to run - yourcommand 1326: The user name or password is incorrect.
RUNAS ERROR: Unable to acquire user password
Иногда нужно запустить программу от имени доменного пользователя с компьютера, который не добавлен в домен AD
. В этом случае нужно использовать такую команду (при условии, что в сетевых настройках
вашего компьютера указан DNS сервер, который может отрезолвить этот домен):
Если для запуска программы от другого пользователя не нужно загружать его профиль, используйте параметр /noprofile
. При этом приложение запускается намного быстрее, но может вызвать некорректную работу программ, которые хранят данные в профиле пользователя.
Как добавить пункт “Запуск от имени” для программ в меню Пуск?
Осталось обновить групповые политики
(gpupdate /force) и убедиться, что у программ в меню Пуск появится новое контекстное меню Дополнительно
-> Запуск от имени другого пользователя
.
Пункт “запуск от имени” отсутствует у Universal Windows Platform (UWP) приложения из Microsoft Store. Вы можете запустить UWP приложение от другого пользователя из командной строки с помощью runas.exe.
Выведите список приложений Microsoft Store на компьютере с помощью PowerShell:
Можно найти конкретное приложение
Найдите имя нужного приложения в списке. Например, для запуска встроенного клиента Microsoft Teams Chat
от другого пользователя, выполните:
Запуск программ от имени другого пользователя без ввода пароля
Вы можете сохранить пароль пользователя, который вы вводите. Для этого используется параметр /savecred
.
После указания пароля он сохранится в диспетчере паролей Windows
.
При следующем запуске команды runas под этим же пользователем с ключом
/savecred
Windows автоматически получит сохраненный пароль из Credential Manager
, и не будет запрашивать его повторно.
Чтобы вывести список всех пользователей, для которых сохранены пароли, используется команда:
Однако использование параметра /savecred не безопасно, т.к. пользователь, в чьем профиле сохранен чужой пароль может использовать его для запуска любой
команды под данными привилегиями, или даже сменить
чужой пароль. Кроме того, сохраненные пароли из Credential Manager можно легко украсть, поэтом лучше запретить использование сохраненных паролей
(а тем более нельзя сохранять пароль привилегированной административной учетной записи
).
Примечание
. Кроме того, ключ /savecred не работает в Home редакциях Windows.
Аналогичным образом можно запустить любую другую оснастку (главное знать ее имя).
Выполнение приложений от имени Администратора без запроса UAC
Таким образом, возникает задача выполнения программ или командных файлов от имени администратора при включенном UAC, но без запроса на разрешение их запуска.
Одним из способов решения подобной задачи является использование специально подготовленной задачи стандартного Планировщика заданий Windows.
Необходимо создать задачу для запуска командного файлат с повышенными привилегиями.
Переходим в ”Панель управления” – ”Администрирование” – ”Планировщик заданий” – ”Библиотека планировщика заданий”, выбираем в меню ”Действия” – ”Создать простую задачу”.
С помощью мастера создания простой задачи, создаем задачу, например, с именем Admbat
В качестве триггера запуска можно выбрать режим ”Однократно” и установить дату начала выполнения задачи уже прошедшим днем, чтобы служба планировщика не могла выполнить ее запуск в ненужное нам время.
В качестве действия выбираем ”Запустить программу”
Ставим галочку на ”Открыть окно ”Свойства” для этой задачи после нажатия кнопки ”Готово” ”. В свойствах задачи включаем режим ”Выполнить с наивысшими правами”.
Если выбрать режим ”Выполнять для все пользователей”, то задача не будет открывать никаких окон в сеансе текущего пользователя, что не очень удобно в режиме тестирования командного файла.
В качестве теста можно использовать команду:
netstat –b
– отобразить список соединений с именами создавших их программ. Параметр b
требует административных привилегий. Содержимое командного файла:
Запрошенная операция требует повышения.
а затем, с помощью задачи Admbat планировщика заданий – с повышенными привилегиями, т.е. под учетной записью с правами администратора – на экран будет выведен список соединений с именами программ.
И выполнить задачу планировщика Admbat
командой:
schtasks /run /tn Admbat
Задачу планировщика можно создать и из командной строки с помощью утилиты schtasks.exe
и разрешить ее выполнение с правами администратора, задав параметр /RL HIGHEST
Естественно, данная команда должна выполняться в контексте учетной записи с правами администратора.
WHOAMI /PRIV
– отобразить действующие привилегии текущего пользователя.
Так, например, удаленное выключение компьютера доступно только в контексте учетной записи администратора. В этом случае, в результатах вывода WHOAMI присутствует строка “SeRemoteShutdownPrivilege”. С помощью команды find
ищем эту строку в результатах вывода команды whoami /priv
и если она найдена (переменная ERRORLEVEL равна нулю) – командный файл выполняется с правами администратора. Например:
Можно создать командный файл, проверяющий наличие прав администратора, и при их отсутствии, выполняющий свой перезапуск с использованием повышения привилегий за счет задачи планировщика Admbat
.
Содержимое командного файла:
schtasks /run /TN Admbat
:admin
C:\Scripts\ifadmin.bat
exit
%~f0
C:\Scripts\ifadmin.bat
copy
/Y
C:\Scripts\ifadmin.bat
Дополнительная информация по теме:
Планировщик заданий Windows
Список команд CMD Windows
Управление планировщиком заданий в командной строке Windows
Создание ярлыка с параметром “Запуск от имени администратора”
Вы также можете создать ярлык с параметром “Запуск от имени администратора”. Для этого:
- Нажмите правой кнопкой мыши на рабочем столе.
- Выберите пункт “Новый”.
- Выберите “Ярлык”.
- Введите путь к .bat файлу.
- Нажмите кнопку “Далее”.
- Введите название для ярлыка.
- Нажмите кнопку “Готово”.
- Нажмите правой кнопкой мыши на созданном ярлыке.
- Выберите пункт “Свойства”.
- Выберите вкладку “Ярлык”.
- Нажмите кнопку “Дополнительно”.
- Выберите параметр “Запуск от имени администратора”.
- Нажмите кнопку “ОК”.
Теперь, когда вы запустите ярлык, .bat файл будет запущен от имени администратора, и сообщение о правах доступа не появится.
Предоставить пользователю права на запуск программы
Программа может запрашивать права администратора при запуске, если:
- Программе нужно получить доступ на системный каталог или файл, на отсутствуют NTFS разрешения для непривилегированных пользователей;
- Если программа собрана со специальным флагом, которые требует повышения прав при запуске (requireAdministrator).
В первом случае для решения проблемы администратору достаточно предоставить RW или Full Control разрешения на каталог программы или необходимый системных каталог. Например, программа хранит свои файлы (логи, файлы конфигурации и т.д.) в собственной папке в C:\Program Files (x86)\SomeApp) или каком-то системном каталоге. Для корректной работы программы пользователю нужны права записи в эти файлы. По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора.
Чтобы найти список файлов, папок и ключей реестра, к которым обращается программа, воспользуйтесь утилитой Process Monitor ( https://learn.microsoft.com/en-us/sysinternals/downloads/procmon
). Включите фильтр по имени процесса программы и найдите все ресурсы, при доступе к которым появляется Access Denied. Предоставьте необходимые права на папки/файлы/ветки реестра.
Примечание
. В рекомендациях Microsoft для разработчиков указано, что не рекомендуется хранить изменяющиеся данных приложения в каталоге C:\Program Files неверна. Правильнее хранить данные приложения в профиле пользователя. Но это уже вопрос о лени и некомпетентности разработчиков программ.
В проводнике Windows отсутствует пункт “Запуск от имени другого пользователя”
В Windows вы можете скрыть или показать в проводнике пункт меню RunAs с помощью двух параметров реестра:
- Параметр HideRunAsVerb
(тип REG_DWORD) в ветке реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer (1 – скрыть пункт runas, 0 – показать) - Параметр EnableSecureCredentialPrompting
(REG_DWORD) в HKLM\ Software\Microsoft\Windows\CurrentVersion\Policies\CredUI (1 – скрыть, 0 – показать)
Второму параметру реестра соответствует отдельная опция GPO.
Ярлык с запуском программы от имени другого пользователя
Вы можете создать на рабочем столе ярлык для запуска программы от имени другого пользователя. Просто создайте новый ярлык, в окне с адресом объекта которого укажите команду
с нужными параметрами:
При запуске такого ярлыка будет запрашиваться пароль пользователя.
Если в ярлыке runas добавить параметр
, то пароль будет запрошен только один раз. После этого пароль будет сохранен в Credential Manager и автоматически подставляться при запуске ярлыка от имени другого пользователя без запроса пароля.
Такие ярлыки довольно часто используются для запуска программ, которые требуют прав администратора для запуска. Однако есть более безопасные способы запуска программы без прав администратора
, или отключения запроса UAC для определенного приложения
.
Запуск программы с сохраненным паролем администратора
Если способы запуска программы через режим RunAsInvoker
не работают для вашего устаревшего приложения, можно попробовать запускать такие программы в сессии пользователя с помощью сохраненного пароля администратора. Этот способ мы целенаправленно оставили последним, т.к. это наименее безопасный способ запуска программ без предоставления прав локального администратора пользователю.
Создайте на рабочем столе новый ярлык для запуска программы. Укажите имя компьютера, имя локального администратора и полный путь к исполняемому файлу программы.
Запустите ярлык под пользователем. При первом запуске откроется командная строка, в которой нужно будет указать пароль администратора.
Утилита RunAs
при запуске с параметром /SAVECRED
сохраняет имя пользователя и пароль в диспетчере паролей Windows
(Credentials Manager).
При следующем запуске ярлыка утилита runas автоматически получит сохраненный пароль из Credentials Manager и использует его для запуска программы от имени указанного локального администратора (пароль не запрашивается повторно при каждом запуске).
Вы можете вывести список пользователей с сохраненными паролями в Credential Manager с помощью команды:
В Windows 11 при запуске такого ярлыка появляется ошибка:
RUNAS ERROR: Unable to run - C:\CorpApp\myapp.exe 740: The requested operation requires elevation.
Чтобы исправить ошибку, отредактируйте команду в свойствах ярлыка. Замените ее на:
Как мы указывали выше, использование параметра
/savecred
не безопасно, т.к. пользователь, в чьем профиле сохранен чужой пароль может использовать его для запуска любой
программы или команды под данными привилегиями, или даже сменить пароль пользователя
с правами администратора. Кроме того, сохраненные пароли из Credential Manager можно получить в открытом виде с помощью утилит типа Mimikatz
, лучше <запретить использование сохраненных паролей.
В Windows можно заблокировать возможность сохранения паролей в Credential Manager с помощью параметра групповой политики Network access: Do not allow storage of passwords and credentials for network authentication
(Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options).
Преодолеть недостаток использования сохраненного пароля через runas позволяют несколько сторонних утилит. Например, AdmiLink
, RunAsRob
, RunAsSpc
. Эти программы позволяют сохранить пароль администратора в зашифрованном виде и безопасно запустить программу с правами администратора. Эти утилиты проверяют при запуске путь и контрольную сумму исполняемого файла и не позволят запустить произвольную программу.
Использование RunAs в PowerShell
Если вам нужно запускать программы/процессы от имени другого пользователя из PowerShell, вы можете использовать командлет Start-Process ( управление процессами с помощью PowerShell
). Сначала нужно запросить учетную запись и пароль пользователя:
$Cred = (Get-Credential)
Для запуска процесса от имени другого пользователя можно использовать:
Start-Process -FilePath "powershell.exe" -Credential $Cred
Либо можно запросить учетную запись и пароль интерактивно через Windows Security:
Если вам нужно запустить программу через runas от имени другого администратора в привилегированном режиме (по умолчанию UAC запускает программу в not-elevated пользовательском контексте), можно использовать такую команду PowerShell:
Или стороннюю утилиту ShelExec:
ShelExec /Verb:runas cmd.exe
Запуск программы в режиме RunAsInvoker из командной строки
Переменная окружения __COMPAT_LAYER позволяет устанавливать различные уровни совместимости для приложений (вкладка Совместимость
в свойствах exe файла). С помощью этой переменной можно указать настройки совместимости, с которыми нужно запускать программу. Например, для запуска приложения в режиме совместимости с Windows 7 и разрешением 640×480, установите:
set __COMPAT_LAYER=Win7RTM 640x480
Из интересных нам опций переменной __COMPAT_LAYER можно выделить следующие параметры:
- RunAsInvoker
— запуск приложения с привилегиями родительского процесса без запроса UAC; - RunAsHighest
— запуск приложения с максимальными правами, доступными пользователю (запрос UAC появляется, если у пользователя есть права администратора); - RunAsAdmin
— запустить приложение с правами администратора (запрос AUC появляется всегда).
Следующие команды включат режим 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>
Обратите внимание, что теперь у иконки программы пропал щит UAC и вы можете запустить ее без запроса прав администратора с привилегиями текущего пользователя.
Если исполняемый файл программы подписан цифровой подпись ( сертификатом Code Signing
), то после модификации exe файла, он может перестать запускаться или выдавать предупреждение.
Чтобы Windows при запуске приложений всегда пробовала использовать внешний файл манифеста, включите специальный параметр реестра:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f
Перезагрузите Windows и убедитесь, что программа использует внешний файл манифеста, и запускается без прав администратора.
Использование пункта меню “Открыть как администратор”
Один из простых способов запустить .bat файл с правами администратора – это использовать пункт меню “Открыть как администратор”. Для этого:
- Нажмите правой кнопкой мыши на .bat файле.
- Выберите пункт “Открыть как администратор”.
Таким образом, вы запустите .bat файл с правами администратора, и сообщение о правах доступа не появится.
Изменение настроек Учетной записи управляющего пользователя
Вы также можете изменить настройки Учетной записи управляющего пользователя, чтобы запустить .bat файлы без сообщения о правах администратора. Для этого:
- Нажмите клавишу “Win + R”, чтобы открыть окно “Выполнить”.
- Введите “netplwiz” и нажмите кнопку “ОК”.
- В окне “Учетные записи” выберите свою учетную запись.
- Нажмите кнопку “Свойства”.
- В разделе “Член групп” выберите “Администраторы”.
- Нажмите кнопку “ОК”.
- Перезагрузите компьютер.
Теперь, когда вы запустите .bat файл, он будет запущен от имени администратора, и сообщение о правах доступа не появится.
Запуск программы, требующей права администратора, от обычного пользователя
Ранее мы уже описывали, как можно с помощью параметра RunAsInvoker отключить запрос UAC для конкретной программы
. Однако этот метод недостаточно гибкий.
Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном UAC (4,3 или 2 уровень ползунка UAC
).
Для примера возьмем утилиту редактирования реестра — regedit.exe
(она находится в каталоге C:\windows\). Обратите внимание на щит UAC у иконки. Данный значок означает, что для запуска этой программы будет запрошено повышение привилегий через UAC.
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
Теперь для принудительного запуска приложения без прав администратора и подавлением запроса UAC, просто перетащите нужный exe файл на этот bat файл на рабочем столе.
Редактор реестра должен запуститься без появления запроса UAC и без ввода пароля администратора. Откройте диспетчер процессов, добавьте столбец Elevated
и убедитесь, что в Windows запушен непривилегированный процесс regedit (запущен с правами пользователя).
Аналогичным образом через bat файл можно запускать и конкретное приложение, достаточно указать путь к исполняемому файлу.
Set ApplicationPath="C:\Program Files\MyApp\testapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
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\"\""
Еще раз напомню, что использование программы в режиме RUNASINVOKER не запускает приложение с правами администратора. Параметр AsInvoker подавляет запрос UAC и указывает программе, что она должна запуститься с правами текущего пользователя и не запрашивать повышение привилегий. Если программе действительно нужны повышенные права для редактирования системных параметров или файлов, она не будет работать или повторно запросит права администратора.
So how it works
• Batch runs the script, or BAT or CMD
• Script caller can have a long name spaces included in the call in quotes
• Give back all the parameters call the master script passed from the command line, as if there was no transmission of the call and start something from scratch, also with special characters, like exclamation marks (!) and percentage (%), and also with parentheses ()
• Holds a master script location if the call took place in the directory where this script is the master
@echo off
if "%~1"=="" (echo *** Batch_Admin ***&echo.&echo Automatically get admin rights for another Batch. See info inside.&TIMEOUT /T 30>nul&goto:eof)
:: A D M I N I S T R A T O R - Automatically get admin rights for script batch. Paste this on top: net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
:: Also keep Batch directory localisation and then set variable: PATH_BAT
:: if earlier variable "ShowAdminInfo" is empty (not defined) then no info, else showing info with number of seconds
::
:: Elaboration: Artur Zgadzaj
setlocal
setlocal DisableDelayedExpansion
SET "Localy="
if exist "%~1" SET "Localy=YES"
if exist "%~1.BAT" SET "Localy=YES"
if exist "%~1.CMD" SET "Localy=YES"
if defined Localy FOR %%I IN ("%~1") DO SET "PATH_BAT=%%~dI%%~pI"
SET P1=%~1
SET Parameters=%*
SET Parameters=%Parameters:!=^^!%
setlocal EnableDelayedExpansion
SET Parameters=!Parameters:%P1%=!
SET Parameters=!Parameters:%%=%%%%!
setlocal DisableDelayedExpansion
SET Parameters=%Parameters:~3%
net session >nul 2>nul&if not errorlevel 1 goto Administrator_OK
if not defined ShowAdminInfo goto skip_message_Administrator
echo.
echo Script: %~1
echo.
echo *****************************************************************
echo *** R U N N I N G A S A D M I N I S T R A T O R ***
echo *****************************************************************
echo.
echo Call up just as the Administrator. You can make a shortcut to the script and set:
echo.
echo shortcut ^> Advanced ^> Running as Administrator
echo.
echo Alternatively run once "As Administrator"
echo or in the Schedule tasks with highest privileges
echo.
echo Cancel Ctrl-C or wait for launch %ShowAdminInfo% seconds ...
TIMEOUT /T %ShowAdminInfo% > nul
:skip_message_Administrator
MD %TEMP% 2> nul
SET /A $Admin$=%RANDOM% * 100 / 32768 + 1
SET "Percent="
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo %Parameters% > "%TEMP%\$Admin_%$Admin$%_Test.bat"
if not exist "%TEMP%\$Admin_%$Admin$%_Test.bat" SET Percent=^"
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo @SET "PATH_BAT=%PATH_BAT%" > "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo @SET "BatchFullName=%BatchFullName%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
if defined Localy (echo @CD /D "%PATH_BAT%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat")
echo @"%~1" %Parameters% %Percent% >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
echo UAC.ShellExecute "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat", "", "", "runas", 1 >> "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
"%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
endlocal
exit /B
:Administrator_OK
"%~1" %Parameters%
goto:eof
REM *** A D M I N I S T R A T O R - Automatically get admin rights (The End) ***
Заключение
Это несколько способов запустить .bat файлы без сообщения о правах администратора. Каждый из них может быть эффективным в зависимости от вашей ситуации. Выберите тот, который наиболее удобен и прост в использовании.