System.Diagnostics.Process, выдающий себя за другого пользователя - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть следующий код, который работает.Мой метод обратного вызова вызывается с выходными данными программы по мере ее генерации.

var proc = new System.Diagnostics.Process();
//proc.StartInfo.Domain = DOMAIN;
//proc.StartInfo.UserName = USERNAME;
//proc.StartInfo.Password = BuildPasswordString();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.FileName = EXEC_PATH;
proc.StartInfo.Arguments = EXEC_ARGS;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
proc.OutputDataReceived += proc_OutputDataReceived;
proc.BeginOutputReadLine();
proc.WaitForExit();

Однако, как только я раскомментирую эти три строки, касающиеся учетных данных пользователя, все перестает работать.Код выполняется без ошибок, но процесс не запускается, и в моем методе обратного вызова не получаются выходные данные.

Как я могу выполнить отдельный процесс, собирать его выходные данные асинхронно, как он генерируется, при использованииучетные данные конкретного пользователя, которые не соответствуют процессу выполнения?

Обновление:
На основе ответа @ Dos095-russ я протестировал тот же код с консольным приложением вместоASP.NET.Это работает.Таким образом, что-то в среде ASP.NET вызывает сбой.

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Я потратил почти 2 дня, чтобы решить эту проблему ... Вот решение: http://forums.asp.net/p/1032763/3054483.aspx

Вкратце, вам нужно установить "Идентификатор пула приложений" , такой же, как ваши "proc.StartInfo.UserName" и "proc.StartInfo.Password" .

Вы можете изменить Идентификацию «DefaultAppPool» или создать новый «Пул приложений» , используя в качестве идентификатора имя «proc.StartInfo.UserName».

Конечно, если вы создаете новый «Пул приложений», вам необходимо назначить , чтобы ваше веб-приложение asp.net использовало этот «Пул приложений».

Надеюсь, это полезно, удачи. lzch

0 голосов
/ 02 декабря 2011

Я думаю, что проблема в механизме безопасности UAC: у вашего исходного приложения нет прав на чтение выходных данных процесса другого пользователя (даже если это дочерний процесс).Попробуйте запустить приложение с правами администратора и посмотреть, работает ли ваш код.

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

Также обнаружена похожая проблема Получить ошибку и стандартный вывод от дочернего процесса с повышенными правами

...