█ 04.10.2013 09:27
Как и многие — столкнулся с необходимостью запустить на Win’7 старый софт, который «хочет» администраторские права.
В данном случае — это клиент для .
Ни разу не сталкивался с такой задачей, поэтому решил попробовать самое простое — runas.
При запуске — получаю ошибку:
Цитата:
740: Запрошенная операция требует повышения прав
Поискав — на англоязычных сайтах нашёл подсказку
Надо запускать не так
Код:
runas /user:ИмяПользователя ИмяПрограммы.EXE
а так
Код:
RunAs /user:ИмяПользователя "CMD /C start /B Путь_И_ИмяПрограммы.EXE"
█ 04.10.2013 09:32
Может быть проблема на самом деле в том, что 16-битные приложения теперь только через cmd работают?
█ 04.10.2013 09:57
Цитата:
Dr. Hyde ➤ Может быть проблема на самом деле в том, что 16-битные приложения теперь только через cmd работают?
На сколько я понял, в данном случае приложение — не 16-ти разрядное.
Хотя…
А как понять — приложение 16-ти разрядное или 32?
В MS, конечно, есть , но в Win’7 это, похоже, не поможет.
█ 04.10.2013 10:07
На ноутбуке, с которого пишу — да, x64.
На том компьютере, на который, собственно, и надо поставить клиента — x32.
█ 04.10.2013 10:11
Подумалось просто, что проблема с запуском уже х32-приложения. Есть еще предположение, что у cmd изначально прибиты какие-то свойства совместимости, которые по наследству передаются приложению. Т.е. если приложению прикрутить режим совместимости, то оно тоже будет запускаться.
█ 04.10.2013 11:55
а если cmd.exe в свойства поставить, что он будет запускаться от администратора?
█ 04.10.2013 12:42
Цитата:
whitewizard ➤ а если cmd.exe в свойства поставить, что он будет запускаться от администратора?
А зачем? (действительно не понимаю)
Была задача — запустить <<под доменным пользователем>> (не давая ему прав администратора) возможность просмотра системы видеонаблюдения.
Я пошёл решать её «в лоб» — через runas.
Выдало ошибку.
Нашёл способ эту ошибку обойти и решить поставленную задачу.
О способе решения — поделился.
Я знаю, что runas — не самое лучшее решение, дальше буду биться с
█ 04.10.2013 17:21
На сколько я понял, в описываем решении — задача была
Цитата:
запустить скрипт из командной строки от имени администратора. Мне нужен был эквивалент right-click > «Run as administrator»:
У меня у приложения есть этот пункт в меню, мне нужно, что бы пользователь «не получил» администраторский доступ и, при этом, мог бы запустить приложение.
«Не получил» — для runas, ясное дело, в кавычках. После того, как администраторский пароль будет сохранён — можно будет всё запускать через runas — и система будет думать, что это происходит от администратора. Единственное, что чуть-чуть успокаивает — то что пользователь, скорее всего, так не поступит.
Часовой пояс GMT +3, время: 04:55.
Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.
Любой пользователь Windows может запустить в своей сессии программу от имени другого пользователя с помощью Run As. Благодаря этому вы можете выполнить скрипт (.bat, .cmd, .vbs, .ps1), запустить исполняемый .exe файл или установку приложения (.msi, .cab) с полномочиями другого пользователя.
Например, вы можете использовать RunAs для установки программ или запуска программ/скриптов/MMC оснасток с правами администратора непосредственно в сессии обычного непривилегированного пользователя. Также через RunAs вы можете запустить приложение, настроенное в профиле другого пользователя (приложение загрузится с настройки из профиля другого пользователя).
За возможность запуска программ от имени другого пользователя в Windows отвечает служба Вторичный вход в систему (Secondary Log-on). Если эта служба остановлена, тогда все описанные методы runas работать не будут. Вы можете проверить, что служба запущена с помощью следующей команды PowerShell:
Get-Service seclogon
В Windows есть несколько способов запустить программу или процесс от имени другого пользователя.
Содержание:
- Запуск программы от имени другого пользователя из Проводника Windows (File Explorer)
- Команда Runas: запуск программ от имени из командной строки
- Использование RunAs в PowerShell
- Запуск программ от имени другого пользователя без ввода пароля
- Ярлык с запуском программы от имени другого пользователя
- В проводнике Windows отсутствует пункт “Запуск от имени другого пользователя”
- Как добавить пункт “Запуск от имени” для программ в меню Пуск?
Запуск программы от имени другого пользователя из Проводника Windows (File Explorer)
Самый простой способ запустить программу из-под другого пользователя – воспользоваться графическим интерфейсом Проводника Windows (File Explorer). Просто найдите нужно приложение (или ярлык), зажмите клавишу Shift и щелкните по нему правой кнопкой мыши. Выберите пункт контекстного меню «Запуск от имени другого пользователя» (Run as different user).
Примечание. Если пункт меню «Запуск от имени другого пользователя» отсутствует, см. следующий раздел.
В появившемся окне Windows Security нужно указать имя и пароль пользователя, под чьей учетной записью нужно запустить программу и нажать кнопку ОК.
Примечание.
- Если нужно запустить программу от имени пользователя Active Directory, нужно указать его имя в формате userPrincipalName (
[email protected]
) или samAccountName (
DomainNameUserName
); - Если ваш компьютер добавлен в домен AD, то для запуска программы от имени локальной учетной записи пользователя ее имя нужно указать в формате:
.localusername
.
Важно. Вы можете запустить программу от имени другого пользователя только, если для него задан пароль. Использовать Runas для пользователя с пустым паролем не получится.
Откройте Диспетчер задач и убедитесь, что приложение запущенно под указанным пользователем.
Команда Runas: запуск программ от имени из командной строки
В Windows есть консольная утилита runas.exe, которую можно использовать для запуска приложений от имени другого пользователя из командной строки. Также команда runas позволяет сохранить пароль пользователя в Windows Credential Manager, чтобы его не приходилось набирать каждый раз.
Откройте командную строку (или окно Выполнить, нажав сочетание клавиш Win+R). Для запуска Блокнота с правами учетной записи administrator выполните команду:
runas /user:administrator “C:Windowscmd.exe”
Совет. Если имя пользователя содержит пробелы, его нужно взять в кавычки:
runas /user:”user test” notepad.exe
В отрывшемся окне появится приглашение «Введите пароль для admin», где нужно набрать пароль и нажать Enter.
Должно открыться ваше приложение. В моем случае это cmd. В заголовке окна указано Запущено от имени
CompNameusername
:
Можно, например, открыть панель управления под другим пользователем:
runas /user:admin control
Если нужно запустить программу от имени доменного пользователя, нужно использовать формат имени
[email protected]
или
DomainNameUserName
.
Например, чтобы с помощью блокнота открыть текстовый файл от имени пользователя server_admin домена CORP, используйте команду:
runas /user:corpserver_admin “C:Windowsnotepad.exe C:tmp2871997x64.txt”
Введите пароль для corpserver_admin: Попытка запуска C:Windowsnotepad.exe C:tmp2871997x64.txt от имени пользователя "corpserver_admin" ...
Если указали несуществующее имя пользователя или неверный пароль, появится ошибка:
RUNAS ERROR: Unable to run - yourcommand 1326: The user name or password is incorrect.
Или
RUNAS ERROR: Unable to acquire user password
Иногда нужно запустить программу от имени доменного пользователя с компьютера, который не добавлен в домен AD. В этом случае нужно использовать такую команду (при условии, что в сетевых настройках вашего компьютера указан DNS сервер, который может отрезолвить этот домен):
runas /netonly /user:contosoaaivanov cmd.exe
Если для запуска программы от другого пользователя не нужно загружать его профиль, используйте параметр /noprofile. При этом приложение запускается намного быстрее, но может вызвать некорректную работу программ, которые хранят данные в профиле пользователя.
Использование RunAs в PowerShell
Если вам нужно запускать программы/процессы от имени другого пользователя из PowerShell, вы можете использовать командлет Start-Process (управление процессами с помощью PowerShell). Сначала нужно запросить учетную запись и пароль пользователя:
$Cred = (Get-Credential)
Для запуска процесса от имени другого пользователя можно использовать:
Start-Process -FilePath "powershell.exe" -Credential $Cred
Либо можно запросить учетную запись и пароль интерактивно через Windows Security:
# "Run as Administrator"
Start-Process -FilePath "powershell.exe" -Verb RunAs
# Run as от другого пользователя
Start-Process -FilePath "powershell.exe" -Verb RunAsUser
Если вам нужно запустить программу через runas от имени другого администратора в привилегированном режиме (по умолчанию UAC запускает программу в not-elevated пользовательском контексте), можно использовать такую команду PowerShell:
Start-Process powershell -Credential winitproadmin2 -ArgumentList '-noprofile -command &{Start-Process "cmd.exe" -verb runas}'
Или стороннюю утилиту ShelExec:
ShelExec /Verb:runas cmd.exe
Запуск программ от имени другого пользователя без ввода пароля
Вы можете сохранить пароль пользователя, который вы вводите. Для этого используется параметр /savecred.
runas /user:admin /savecred “C:Windowsnotepad.exe”
После указания пароля он сохранится в диспетчере паролей Windows.
При следующем запуске команды runas под этим же пользователем с ключом
/savecred
Windows автоматически получит сохраненный пароль из Credential Manager, и не будет запрашивать его повторно.
Чтобы вывести список всех пользователей, для которых сохранены пароли, используется команда:
RunDll32.exe keymgr.dll,KRShowKeyMgr
Однако использование параметра /savecred не безопасно, т.к. пользователь, в чьем профиле сохранен чужой пароль может использовать его для запуска любой команды под данными привилегиями, или даже сменить чужой пароль. Кроме того, сохраненные пароли из Credential Manager можно легко украсть, поэтом лучше запретить использование сохраненных паролей (а тем более нельзя сохранять пароль привилегированной административной учетной записи).
Примечание. Кроме того, ключ /savecred не работает в Home редакциях Windows.
Вы можете использовать команду RunAs для запуска mmc оснасток от имени другого пользователя. К примеру, если под другим пользователем нужно запустить оснастку Active Directory Users and Computers из набора инструментов администрирования RSAT, можно воспользоваться такой командой.
runas.exe /user:winitprokbuldogov "cmd /c start mmc %SystemRoot%system32dsa.msc"
Аналогичным образом можно запустить любую другую оснастку (главное знать ее имя).
Ярлык с запуском программы от имени другого пользователя
Вы можете создать на рабочем столе ярлык для запуска программы от имени другого пользователя. Просто создайте новый ярлык, в окне с адресом объекта которого укажите команду
runas
с нужными параметрами:
runas /user:winitprokbuldogov “C:Windowsnotepad.exe”
При запуске такого ярлыка будет запрашиваться пароль пользователя.
Если в ярлыке runas добавить параметр
/savecred
, то пароль будет запрошен только один раз. После этого пароль будет сохранен в Credential Manager и автоматически подставляться при запуске ярлыка от имени другого пользователя без запроса пароля.
Такие ярлыки довольно часто используются для запуска программ, которые требуют прав администратора для запуска. Однако есть более безопасные способы запуска программы без прав администратора, или отключения запроса UAC для определенного приложения.
В проводнике Windows отсутствует пункт “Запуск от имени другого пользователя”
Если в контекстном меню проводника Windows отсутствует пункт Запуск от имени другого пользователя (Run as different user), нужно проверить настройки двух параметров реестра Windows.
В Windows вы можете скрыть или показать в проводнике пункт меню RunAs с помощью двух параметров реестра:
- Параметр HideRunAsVerb (тип REG_DWORD) в ветке реестра HKLMSOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorer (1 – скрыть пункт runas, 0 – показать)
- Параметр EnableSecureCredentialPrompting (REG_DWORD) в HKLM SoftwareMicrosoftWindowsCurrentVersionPoliciesCredUI (1 – скрыть, 0 – показать)
Если в Windows не отображается пункт Run as different user, проверьте значения этих параметров реестра и измените их на 0. В доменной среде вы можете распространить значения этих параметров реестра на компьютеры с помощью Group Policy Preferences.
Второму параметру реестра соответствует отдельная опция GPO.
Этой опции GPO соответствует параметр EnableSecureCredentialPrompting в ветке реестра HKLM SoftwareMicrosoftWindowsCurrentVersionPoliciesCredUI. Откройте редактор локальных групповых политик (gpedit.msc) и убедитесь, что в разделе Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Пользовательский интерфейс учетных данных (Computer Configuration -> Administrative Templates -> Windows Components -> Credential User Interface) отключена (Не задана) политика Запрашивать достоверный путь для входа в учетную запись (Require trusted path for credential entry).
Как добавить пункт “Запуск от имени” для программ в меню Пуск?
По-умолчанию в Windows 10 у элементов меню Пуск (начального экрана) отсутствует возможность запуска приложений от имени другого пользователя. Чтобы добавить в контекстное меню пункт “Запуск от имени другого пользователя”, нужно включить политику Показывать команду «Запуск от имени другого пользователя» при запуске (Show “Run as different user” command onStart) в разделе редактора групповых политик (консоль
gpedit.msc
) Конфигурация пользователя ->Административные шаблоны -> Меню Пуск и панель задач (User Configuration -> Administrative Templates -> Start Menu and Taskbar).
Либо, если редактор gpedit.msc отсутствует, создать в ветке реестра HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsExplorer ключ типа DWORD с именем ShowRunasDifferentuserinStart и значением 1.
New-ItemProperty -Path "HKCU:SoftwarePoliciesMicrosoftWindowsCurrentVersionExplorer" -Name ShowRunasDifferentuserinStart -Value 1 -PropertyType DWORD -Force
Осталось обновить групповые политики (gpupdate /force) и убедиться, что у программ в меню Пуск появится новое контекстное меню Дополнительно -> Запуск от имени другого пользователя.
Пункт “запуск от имени” отсутствует у Universal Windows Platform (UWP) приложения из Microsoft Store. Вы можете запустить UWP приложение от другого пользователя из командной строки с помощью runas.exe.
Выведите список приложений Microsoft Store на компьютере с помощью PowerShell:
Get-AppxPackage|select Name
Можно найти конкретное приложение
Get-AppxPackage|where {$_.Name -like '*team*'} |select Name
Найдите имя нужного приложения в списке. Например, для запуска встроенного клиента Microsoft Teams Chat от другого пользователя, выполните:
runas /user:user1 "explorer.exe MicrosoftTeams:"
As @mtijn said you’ve got a lot going on that you’re also overriding later. You also need to make sure that you’re escaping things correctly.
Let’s say that you want to run the following command elevated:
dir c:
First, if you just ran this command through Process.Start()
a window would pop open and close right away because there’s nothing to keep the window open. It processes the command and exits. To keep the window open we can wrap the command in separate command window and use the /K
switch to keep it running:
cmd /K "dir c:"
To run that command elevated we can use runas.exe
just as you were except that we need to escape things a little more. Per the help docs (runas /?
) any quotes in the command that we pass to runas
need to be escaped with a backslash. Unfortunately doing that with the above command gives us a double backslash that confused the cmd parser so that needs to be escaped, too. So the above command will end up being:
cmd /K "dir c:\"
Finally, using the syntax that you provided we can wrap everything up into a runas
command and enclose our above command in a further set of quotes:
runas /env /user:Administrator "cmd /K "dir c:\""
Run the above command from a command prompt to make sure that its working as expected.
Given all that the final code becomes easier to assemble:
//Assuming that we want to run the following command:
//dir c:
//The command that we want to run
string subCommand = @"dir";
//The arguments to the command that we want to run
string subCommandArgs = @"c:";
//I am wrapping everything in a CMD /K command so that I can see the output and so that it stays up after executing
//Note: arguments in the sub command need to have their backslashes escaped which is taken care of below
string subCommandFinal = @"cmd /K """ + subCommand.Replace(@"", @"\") + " " + subCommandArgs.Replace(@"", @"\") + @"""";
//Run the runas command directly
ProcessStartInfo procStartInfo = new ProcessStartInfo("runas.exe");
procStartInfo.UseShellExecute = true;
procStartInfo.CreateNoWindow = true;
//Create our arguments
string finalArgs = @"/env /user:Administrator """ + subCommandFinal + @"""";
procStartInfo.Arguments = finalArgs;
//command contains the command to be executed in cmd
using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
{
proc.StartInfo = procStartInfo;
proc.Start();
}