C# - Process.Start, как другой пользователь не работает
Я пытаюсь запустить процесс как другой пользователь. У меня есть сервер ASP .NET и я хочу запустить скрипт (сначала простой пакетный файл "Hello World"). Если я сделаю это:
Process.Start(filepath);
это работает, так что даже это:
Process proc = new Process();
ProcessStartInfo info = new ProcessStartInfo()
{
info.FileName = filepath;
info.Arguments = args;
info.WorkingDirectory = Path.GetDirectoryName(filepath);
info.RedirectStandardError = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false
)};
proc.StartInfo = info;
proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(proc_Exited);
proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
proc.ErrorDataReceived += new DataReceivedEventHandler(proc_ErrorDataReceived);
proc.Start();
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
Итак, вот моя проблема, если я делаю это с именем пользователя и паролем, например:
info.UserName = "USER";
string password = "PASSWORD";
SecureString passw = new SecureString();
foreach (char c in password)
passw.AppendChar(c);
info.Password = passw;
Это не сработает. В журнале событий Windows написано "Пользователь успешно вошел в систему (USER)", поэтому логин правильный (имя пользователя / пароль). Когда я подключаюсь (удаленно) к серверу, я могу щелкнуть правой кнопкой мыши пакетный файл и "запустить от имени другого пользователя" с помощью USER и PASSWORD (как в моей программе), и он работает, поэтому у пользователя есть доступ / разрешение на выполнение пакетного файла.
Странно то, что в моей программе нет ошибок, процесс запускается, но сразу выходит с кодом выхода -1073741502. В Windows Eventlog (System) я получаю информацию (в моем мнении ошибка)
Application Popup: cmd.exe Could not initialize the application (0xc0000142). Click "OK" to close the application.
Я могу попытаться выполнить пакетный файл, cmd.exe напрямую (с полным путем) или запустить другой исполняемый файл. Я всегда могу сделать щелчок правой кнопкой мыши "запустить как другой пользователь", я всегда могу сделать Process.Start, но я не могу сделать это (Process.Start) с другим пользователем (с именем пользователя и паролем).