Гарантирующий процесс.Start () выполняется от имени зарегистрированного пользователя

#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 на учетную запись администратора, но все еще не работает,