このコードが開発用コンピューター (win7 32 ビット) とターゲット サーバー (2008r2 64 ビット) でコンソール アプリとして完全に実行される理由。しかし、ターゲット サーバーで Web サービスとして実行しようとしても、何もしません。エラーなし、何もありません。
外すと
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;
}
コードが実行されるユーザーについて何かがあるに違いないと思います。Web サービスとして、このコードは asp.net ユーザーの下で実行されるため、問題が発生する可能性があります。
これを修正する方法を教えてください。どうもありがとうございました。
解決済み
問題は EULA ダイアログにあり、ポップアップが表示されましたが、ProcessStartInfo 設定のために表示されませんでした。この Web サービスのアプリケーション プールにも使用されているアカウントで CMD 経由で PsList.exe を実行すると、EULA 契約を求めるプロンプトが表示され、その後はすべて正常に動作します。
奇妙なことに、「pInfo.Arguments = "/accepteula";」があることです。私の実際のコードで。これは私の問題を防ぐはずですが、そうではなく、理由がわかりません。理由を知っている方がいましたら教えてください。
大変お世話になりました。あなたはここにいる本当に良い人々です。