Как создать файл run as non admin bat

Обновлено: 06.07.2024

Запуск программы без прав администратора и подавлением запроса 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, которая идет в составе Windows. Для удобства её использования проще всего будет создать cmd файл, в который следует поместить следующее:

Вместо Домена пользователя и Пользователя вводим данные учетной записи пользователя, который обладает правами администратора в домене, или на компьютере (в таком случае, вместо Домена пользователя следует писать имя компьютера). Вместо Путь к программе соответственно пишем путь к нужному exe файлу.

date

18.03.2021

directory

Windows 10, Windows Server 2016

comments

комментариев 50

Многие программы при запуске требуют повышения прав (значок щита у иконки), однако на самом деле для их нормальной работы права администратора не требуется (например, вы можете вручную предоставить необходимые права пользователям на каталог программы в ProgramFiles и ветки реестра, которые используются программой). Соответственно, если на компьютере включен контроль учетных записей, то при запуске такой программы из-под непривилегированного пользователя появится запрос UAC и Windows потребует от пользователя ввести пароль администратора. Чтобы обойти этот механизм многие просто отключают UAC или предоставляют пользователю права администратора на компьютере, добавляя его в группу локальных администраторов. Microsoft не рекомендует использовать такие методы, т.к. это снижает безопасность компьютера.

Зачем обычному приложению могут понадобится права администратора?

Права администратора могут потребоваться программе для модификации некоторых файлов (логи, файлы конфигурации и т.д.) в собственной папке в C:\Program Files (x86)\SomeApp). По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора. Чтобы решить эту проблему, нужно войти на компьютер под администратором и вручную предоставить пользователю (или встроенной группе Users) права на изменение/запись для этого каталога на уровне файловой системы NTFS.

права на запись пользователю в папку программы в ProgramFiles

Примечание. На самом деле практика хранения изменяющихся данных приложения в собственном каталоге в C:\Program Files неверна. Правильнее хранить данные приложения в профиле пользователя. Но это уже вопрос о лени и некомпетентности разработчиков программ.

Запуск программы, требующей права администратора, от обычного пользователя

Ранее мы уже описывали, как можно с помощью параметра RunAsInvoker отключить запрос UAC для конкретной программы. Однако этот метод недостаточно гибкий.

Также можно воспользоваться RunAs с сохранением пароля админа /SAVECRED в диспетчере паролей Windows (Credentials Manager). Это также небезопасно, т.к. пользователь может использовать сохранённый пароль учетной записи администратора для запуска других программ.

Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном UAC (4,3 или 2 уровень ползунка UAC).

Для примера возьмем утилиту редактирования реестра — regedit.exe (она находится в каталоге C:\windows\). Обратите внимание на щит UAC у иконки. Данный значок означает, что для запуска этой программы будет запрошено повышение привилегий через UAC.

иконка щита UAC у exe файла в Windows 10

Если запустить regedit.exe , то перед вами появится окно User Account Contol с запросом пароля пользователя с правами администратора на этом компьютере ( Do you want to allow this app to make changes to your device? ). Если не указать пароль и не подтвердить повышение привилегии, приложение не запустится.

запрос пароля администратора при запуске программы в windows 10

Попробуем обойти запрос UAC для этой программы. Создайте на рабочем столе файл run-as-non-admin.bat со следующим текстом:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

Теперь для принудительного запуска приложения без прав администратора и подавлением запроса UAC, просто перетащите нужный exe файл на этот bat файл на рабочем столе.

запуск программы в обход UAC и с подавлением запроса пароля администратора

После этого редактор реестра должен запуститься без появления запроса UAC и без ввода пароля администратора. Откройте диспетчер процессов, добавьте столбец Elevated и убедитесь, что в Windows 10 запустился непривилегированный процесс regedit (запущен с правами пользователя).

regedit с правами пользовтеля (Elevated = No)

Попробуйте отредактировать любой параметр в ветке 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 файлу (понадобятся права администратора).

добавть в file explorer windows 10 пункт запуска программы без запроса UAC

Можно распространить этот пункт меню на компьютеры в домене через импорт ветки реестра с помощью групповых политики.

После этого для запуска любого приложения без прав админа достаточно выбрать пункт “Run as user without UAC elevation” в контекстном меню проводника Windows File Explorer.

Run as user without UAC elevation

Еще раз напомню, что использование программы в режиме RUNASINVOKER не позволит вам получить повышенные права для программы. Параметр AsInvoker подавляет сообщает UAC и сообщает программе, что она должна запуститься с правами текущего пользователя и не запрашивать повышение привилегий. Если программе действительно нужны повышенные права для редактирования системных параметров или файлов, она не будет работать или повторно запросит права администратора.

RunAsInvoker в переменной окружения __COMPAT_LAYER

Переменная окружения __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 файла программы

Вы можете отредактировать манифест exe файла программы и отключить требование запускать программу в привилегированном режиме.

Для редактирования манифеста программы можно использовать бесплатную утилиту Resource Hacker. Откройте исполняемый файл программы в Resource Hacker.

В дереве слева перейдите в раздел Manifest и откройте манифест программы.

Обратите внимание на строки:

Именно благодаря опции requireAdministrator Windows всегда запускает эту программу с правами администратора.

Измените requireAdministrator на asInvoker и сохраните изменения в exe файле.

resource hacker включитьпараметр asinvoker в manifest exe файла

Обратите внимание, что теперь у иконки программы пропал щит UAC и вы можете запустить ее без запроса прав администратора с привилегиями текущего пользователя.

убрат щит защиты uac у любой программы в windows 10 с помощью манифест файла

Если исполняемый файл программы подписан подписью MS Authenticode (сертификатом Code Signing), то после модификации exe файла он может перестать запускаться или выдавать предупреждение.

В этом случае можно заставить программу использовать внешний файл манифеста. Создайте в каталоге с ехе файлом текстовый файл 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 и убедитесь, что программа использует внешний файл манифеста, в котором указано, что нужно запускаться без прав администратора.

    Команда RunAS используется для запуска приложения под учетной записью пользователя, имя которого передается в качестве параметра командной строки. В Windows 7, и более поздних, данная команда, при стандартных настройках безопасности, не позволяет получить администраторские привилегии, как это происходит в режиме "Запустить от имени Администратора". Для запуска приложения от имени администратора потребуется выполнение некоторых настроек системы. Универсальный способ запуска приложений и командных файлов от имени администратора без запроса системы контроля учетных записей UAC с использованием стандартного Планировщика заданий описан в статье Запуск из командного файла приложений от имени Администратора без запроса UAC.

Формат командной строки RUNAS:

RUNAS [ [/noprofile | /profile] [/env] [/savecred | /netonly] ] /user:имя пользователя программа

RUNAS [ [/noprofile | /profile] [/env] [/savecred] ] /smartcard [/user:имя пользователя] программа

RUNAS /trustlevel:уровень доверия программа

Параметры командной строки:

/noprofile - Не загружать профиль пользователя. Это приводит к более быстрой загрузке приложения, но может стать причиной неправильной работы некоторых приложений.

/profile - Загружать профиль пользователя. Этот параметр установлен по умолчанию.

/env - Использовать текущие параметры среды.

/netonly - Учетные данные предназначены только для удаленного доступа.

/savecred - Использовать учетные данные, сохраненные пользователем. Этот вариант не доступен в выпусках Windows 7 Домашняя или Windows 7 Начальная и будет проигнорирован.

/smartcard - Для указания учетных данных используется смарт-карта.

/user - имя пользователя должно быть в виде USER@DOMAIN или DOMAIN\USER

/showtrustlevels - Отобразить список уровней доверия, которые можно использовать в качестве аргументов параметра /trustlevel.

/trustlevel - Значение "уровень доверия" должно быть перечислено в списке уровней доверия.

программа - Командная строка для EXE. См. примеры ниже.

runas /user:mymachine\administrator cmd.exe - запустить интерпретатор команд cmd.exe от имени пользователя "administrator" компьютера "mymachine". При выполнении команды, будет запрошен пароль пользователя, от имени которого должна выполняться задача.

runas /noprofile /env /user:mydomain\admin " mmc %windir%\system32\diskmgmt.msc " - запустить консоль mmc с оснасткой "Управление дисками" от имени пользователя "admin" в домене "mydomain". Профиль пользователя не загружается, и используются текущие переменные среды. Загрузка профиля пользователя необходима только тогда, когда будет выполняться задача, которой требуются какие-либо данные из него. Если задан параметр "/env" то переменные окружения наследуются из среды текущего пользователя.

runas /savecred /user:admin@mydomain regedit.exe - запустить редактор реестра "regedit.exe" от имени пользователя "admin" домена "mydomain" с запоминанием введенного пароля. При наличии параметра "/savecred", введенный пароль запоминается в реестре в зашифрованном виде и в дальнейшем запрашиваться не будет .

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 необходимо изменить стандартные настройки безопасности системы:

- включить учетную запись Администратора ( по умолчанию, она отключена);

- задать пароль для пользователя Администратор ;

Для проверки наличия прав администратора использовался командный файл с именем who-admin.bat следующего содержания:

WHOAMI /PRIV | find /i "SeRemoteShutdownPrivilege"

if %ERRORLEVEL% == 0 goto admin

echo NOT have admin rights!

Runas, .bat и server 2k8
Собственно такая ситуация, нужно запустить программу требующую права админа с учетки имеющие права.

Как запустить runas в батнике без ввода пароля?
я заношу в батнике в буфер пароль(пароль 1), но команда runas не видит его echo 1 | runas.

Если ОС — Windows XP, то выполнить один BAT-файл, а если ОС — Windows 7, — другой BAT-файл
Доброго времени. Кто будет добр и подскажет решение. Надо чтобы bat определял версию ОС (XP или 7).

Runas не работает под системной учётной записью
здравствуйте. проблема такая: если в запущенной под системной уч. записью командной строке.

Phil,
Запуск от имени администратора без запросов
Вот здесь я описывал подробно принцип повышения прав.

Добавлено через 7 минут
Если речь идет об удаленном запуске скриптов, я бы наверное выбрал либо PSEXEC, либо Powershell(Invoke-command), либо планировщик (SCHTASKS)

v_svitere,
я правильно понял всё равно будет происходить

Думаю не совсем.

При использовании RUNAS, вам все равно нужно будет ввести пароль хотя бы 1 раз (при использовании ключа \Savecred)
На вскидку не помню, как это работает при запуске на удаленных машинах. Вероятно, нужно будет сохранять их для каждого подключения.

Вариант с RUNAS мне вообще не нравится.

Элевация прав запуска BAT-файла (отображается диалог контроля учетных записей UAC)

Нет, это окно подтверждения элевации UAC.

Я запускал скрипты при помощи PSEXEC, и не испытывал явных неудобств, при таком подходе вводить пароль необязательно, а можно указать в явном виде аргументом.
Единственное, в этом случае он будет виден в явном виде, это наверное, не так хорошо

Подключаем сетевой диск, скачиваем программу, отключаем диск, устанавливаем программу
вот только на установку нужны администраторские права.
поэтому через runas пытался установить под Администратором, но пароль не получается подсунуть.

Пытался сейчас через планировщик подсунуть выполнение своего батника, но..

Ошибка: Отказано в доступе

Добавлено через 2 минуты
v_svitere,

выходит окно о подтверждении и вводе пароля администратора для продолжения

При таком подходе SCHTASKS должен запускаться с правами администратора
По гибридному варианту с VBS я вам ничего не подскажу, по VBS знаний нет.

Я правильно понимаю, что запуск скрипта должен быть с одного ПК на другие удаленные?

Я правильно понимаю, что запуск скрипта должен быть с одного ПК на другие удаленные?

Нет, батник будет запускаться напрямую с каждого компьютера, где необходимо обновить программу.

Добавлено через 5 минут
v_svitere,

Нет, батник будет запускаться напрямую с каждого компьютера, где необходимо обновить программу.

Так себе вариант. Врядли так теперь вообще кто-то делает, с учетом того, что теперь столько средств для удаленного запуска скриптов

В любом случае, я бы предложил вам уйти от решения на BAT, а реализовать, например через powershell.
Написать один общий на всех скрипт, в котором можно часть кода (установка программы) запустить в контексте пользователя "Администратор", в powershell это можно сделать при помощи командлета start-process и ключом -Runas, которому можно передать credential в неинтерактивном режиме.

Утилита из Sysinternals - стороннее ПО

Добавлено через 14 минут

В любом случае, я бы предложил вам уйти от решения на BAT

Или загибридить BAT и POSH, если нужен именно BAT-файл

Добавлено через 4 минуты
Phil,

Можете прокомментировать, если Вас не затруднит, что делает каждая строка

Добавлено через 3 минуты
v_svitere, и ссылку дать на какой-нибудь пример скрипта из powershell похожего на выполнение моей задачи, попробую разобраться,

Просто этот скрипт ещё надо будет запустить и т.д.

Пока единственный вариант всё это провернуть, который мне кажется самым возможным.

Все пользователи 1с заходят со своих портативных ноутбуков в 1с и запускают внутреннюю обработку,
в ней сидит bat файл, он сохраняется на рабочий стол, 1с закрывается, файл запускается.
Как-то так,на большее фантазии не хватило)

Здесь, средствами CMD запускается powershell. Создается ScriptBlock(Набор команд Powershell).

Конвертируем пароль в защищенную строку.
Создаем объект Credential (Аутентификационные данные)
Запускаем процесс установки, с ключом -Runas , которому передаем ранее созданный объект

Добавлено через 13 минут
Phil,

Все пользователи 1с заходят со своих портативных ноутбуков в 1с и запускают внутреннюю обработку,
в ней сидит bat файл, он сохраняется на рабочий стол, 1с закрывается, файл запускается.
Как-то так,на большее фантазии не хватило)

Ранее предложенный вариант, вас устраивает.

Наверное, момент с Bat-файлом вы можете опустить, сразу сформировав powershell-скрипт (PS1-файл)
Переписываете вот эту часть на powershell
Подключаем сетевой диск, скачиваем программу, отключаем диск
А установку программы делаете как я вам показал в предыдущем посте, через start-process -runas

Читайте также: