System.Diagnostics.Process не принимает учетные данные

Я пытаюсь выполнить пакетный файл, используя класс Process. Этот код находится в середине большей части кода, где я использую LogonUser() и WindowsIdentity.Impersonate() для олицетворения локальной учетной записи администратора ПК.

Я пытался запустить пакетный файл в процессе, не добавляя учетные данные в ProcessStartInfo, но это привело к тихому сбою пакетного файла - никаких ошибок не возникало, и ожидаемый результат из пакетного файла никогда не возвращался (я читаю stderr и stdout асинхронно, между прочим).

Затем я добавил учетные данные в ProcessStartInfo, но теперь я получаю сообщение об ошибке «Отказано в доступе», если я сначала не вызываю WindowsImpersonationContext.Undo(), и «Ошибка входа в систему: неизвестное имя пользователя или неверный пароль», если я вызываю .Undo () перед Process.Start(). Я трижды проверил правильность имени пользователя/пароля/домена для нескольких учетных записей.

Если в моем коде нет вызовов LogonUser() или WindowsIdentity.Impersonate() (и нет учетных данных в ProcessStartInfo), то у меня нет проблем с выполнением пакетного файла и выходом из захваченного пакетного файла.

Я могу успешно запустить пакетный файл с рабочего стола либо в качестве локального администратора, либо в качестве произвольной локальной учетной записи пользователя. Я вижу, что его разрешения показывают, что он должен быть доступен для чтения/исполнения из учетных записей, которые я пытаюсь запустить. Это действительно довольно глупо; любая помощь приветствуется.


person Conrad    schedule 01.11.2011    source источник


Ответы (2)


Проблема заключалась в том, что мне нужно было перенаправить все 3 потока; Я перенаправлял только 2 (исходя, ошибаюсь, а не входя). Это в основном исправило ситуацию.

person Conrad    schedule 27.02.2012

Вы ищете что-то подобное?

Process proc = new Process();
proc.StartInfo.FileName = @"C:\WINNT\notepad.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;

proc.StartInfo.Domain = "mydomain.com"; // Domain of IIS Computer
proc.StartInfo.UserName = "kaung"; //Administrator for that computer
System.Security.SecureString password = new System.Security.SecureString();
password.AppendChar('m'); //Password
password.AppendChar('y');
password.AppendChar('p');
password.AppendChar('a');
password.AppendChar('s');
password.AppendChar('s');
password.AppendChar('w');
password.AppendChar('o');
proc.StartInfo.Password = password;

proc.Start();
person kaung htet naing    schedule 23.02.2012