Почему этот код отлично работает на моем компьютере разработчика (win7 32bit) и на целевом сервере (2008r2 64bit) как консольное приложение. Но когда я пытаюсь запустить его как веб-сервис на целевом сервере, он ничего не делает. Нет ошибок, ничего.
Если я удалю
exitMsg = proc.StandardOutput.ReadToEnd();
, то происходит сбой с ошибкой:
System.InvalidOperationException:
Процесс должен завершиться до запроса
информация может быть определена.
[WebMethod]
public string GetRunningProcesses()
{
ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = @"E:\bin\PsList.exe";
pInfo.WindowStyle = ProcessWindowStyle.Hidden;
pInfo.CreateNoWindow = true;
pInfo.UseShellExecute = false;
pInfo.RedirectStandardOutput = true;
string exitMsg = "";
int exitCode = 1;
using (Process proc = Process.Start(pInfo))
{
exitMsg = proc.StandardOutput.ReadToEnd();
proc.WaitForExit(1000);
exitCode = proc.ExitCode;
}
return exitMsg;
}
Я думаю, что в пользователе должно быть что-то, от чего запускается код. В качестве веб-службы этот код работает под пользователем asp.net, и это может решить проблемы.
Пожалуйста, посоветуйте мне, как это исправить. Большое спасибо.
ПОСТАНОВИЛИ
Проблема была в диалоговом окне EULA, которое всплывало, но было невидимым из-за настроек ProcessStartInfo.
Когда я запускаю PsList.exe через CMD под учетной записью, которая также используется для пула приложений для этой веб-службы, мне предлагается соглашение EULA, и после этого все работает нормально.
Странно, что у меня есть "pInfo.Arguments =" / accepteula ";" в моем реальном коде. Это должно предотвратить мою проблему, но это не так, и я не знаю почему.
Если кто-то из вас знает почему, пожалуйста, скажите мне.
Большое спасибо за помощь. Вы действительно хорошие люди здесь.