#c# #asp.net
#c# #asp.net
Вопрос:
Я запускаю пакетный файл из некоторого ASP.NET/C # код на веб-сервере. В основном пакетный файл выполняет некоторые задачи автоматизации тестирования на виртуальной машине с использованием таких инструментов, как psloggedon и pexec.
Если я запускаю пакетный файл вручную при входе на сервер под учетной записью администратора, он работает нормально.
Моя проблема возникает, когда я запускаю его из своего кода (ниже), кажется, что он запускается под учетной записью ‘SYSTEM’, а psloggedon и т.д., Похоже, работают некорректно.
Код
Process p = new Process();
p.StartInfo.FileName = "C:SetupVM.bat";
p.Start();
p.WaitForExit();
У меня есть это в моем web.config, похоже, это не имеет никакого значения?
<identity impersonate="true" userName="Administrator" password="myadminpassword"/>
Могу ли я в любом случае гарантировать, что пакетный файл запускается под учетной записью «Администратор»?
ОБНОВЛЕННЫЙ КОД
Process p = new Process();
p.StartInfo.FileName = "C:\SetupVM.bat";
p.StartInfo.UserName = "Administrator";
p.StartInfo.UseShellExecute = false;
p.StartInfo.WorkingDirectory = "C:\";
string prePassword = "myadminpassword";
SecureString passwordSecure = new SecureString();
char[] passwordChars = prePassword.ToCharArray();
foreach (char c in passwordChars)
{
passwordSecure.AppendChar(c);
}
p.StartInfo.Password = passwordSecure;
p.Start();
p.WaitForExit();
Из MSDN:
Когда значение UseShellExecute равно false, вы можете запускать только исполняемые файлы с компонентом Process.
Может быть, это проблема, поскольку я пытаюсь запустить файл .bat?
Спасибо.
Комментарии:
1. Привет, вы решили эту проблему, я пробовал то же самое, но все еще не работает
Ответ №1:
Вы можете предоставить имя пользователя и пароль для StartInfo
:
Process p = new Process();
p.StartInfo.FileName = "C:SetupVM.bat";
p.StartInfo.UserName = "Administrator";
p.StartInfo.Password = "AdminPassword";
p.Start();
p.WaitForExit();
Смотрите документацию для ProcessStartInfo
.
Комментарии:
1. Спасибо, я пробовал это, но теперь мой код, похоже, возвращается немедленно без запуска пакетного файла? Я добавил обновленный код в свой вопрос, не могли бы вы быстро взглянуть?
2. Да, очень странно. Я вижу, что cmd.exe сбой в средстве просмотра событий, не уверен, почему.
3. @Jimmy C: У меня была точно такая же проблема — ASP.NET просто отказывается запускать другой процесс от имени другого пользователя (это нормально, если вы не указываете
UserName
иPassword
). Вы нашли решение для этого?4. @kizzx2 — Поскольку я работал над внутренним приложением, в итоге я сменил учетную запись в пуле ресурсов в IIS на пользователя, под которым я хочу, чтобы оно запускалось.
5. @Jimmy C: Я установил идентификатор пула приложений IIS на учетную запись администратора, но все еще не работает,