1

このコードが cmd ウィンドウのみを表示し、最後に到達しないのはなぜですか? PsList からの出力を C# アプリに取得したいと考えています。実行は次の行で停止します: "int exitCode = proc.ExitCode;"

private static void PsList()
{           
    ProcessStartInfo start = new ProcessStartInfo();            
    start.FileName = @"C:\PsList.exe";
    start.WindowStyle = ProcessWindowStyle.Hidden;
    start.CreateNoWindow = true;
    start.UseShellExecute = false;
    start.RedirectStandardOutput = true;

    using (Process proc = Process.Start(start))
    {
        proc.WaitForExit(4000);

        int exitCode = proc.ExitCode;
        string exitMsg = proc.StandardOutput.ReadToEnd();
    }
}
4

2 に答える 2

3

少し並べ替えてみてください。

using (Process proc = Process.Start(start))
{
    string exitMsg = proc.StandardOutput.ReadToEnd();
    proc.WaitForExit(4000);

    int exitCode = proc.ExitCode;
}

出力のリダイレクト時に Process.StartやResGen.exeからログを取得する方法など、多くの関連する質問があります。

于 2011-06-28T22:21:49.280 に答える
0

proc.ExitCode 行で実行がどの程度停止するかによっては、ExitCode プロパティにアクセスするまでにプロセスが終了していない可能性があり、InvalidOperationException がスローされます。

その場合、ExitCode プロパティにアクセスする前に、プロセスが proc.HasExited で既に終了しているかどうかを確認できます。

于 2011-06-28T22:30:09.467 に答える