0

Process.Startを使用してコマンドプロンプトコマンドを呼び出し、次にStandardOutputを使用して、アプリケーションでStreamReaderを使用して読み取りたいのですが、以下のプログラムを実行すると、MessageBoxで、デバッグまでのパスが見つかります。これは、私が述べたコマンドです。 in引数は実行されません。

ProcessStartInfo info = new ProcessStartInfo("cmd.exe", "net view");
            info.UseShellExecute = false;
            info.CreateNoWindow = true;
            info.RedirectStandardOutput = true;    

            Process proc = new Process();
            proc.StartInfo = info;
            proc.Start();

            using(StreamReader reader = proc.StandardOutput)
            {
                MessageBox.Show(reader.ReadToEnd());
            }

ここでは、netviewコマンドは実行されません。

4

2 に答える 2

4

でコマンドを実行する場合は、引数もcmd指定する必要があります。/c

new ProcessStartInfo("cmd.exe", "/c net view");

ただし、この場合はまったく必要ありませんcmdnetはネイティブプログラムであり、シェルなしでそのまま実行できます。

new ProcessStartInfo("net", "view");
于 2012-06-14T20:30:56.540 に答える
1

StandardErrorOutputをインターセプトすることも忘れないでください。そうしないと、何も表示されません。

var startInfo = new ProcessStartInfo("net", "view");
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;

using (var process = Process.Start(startInfo))
{
    string message;

    using (var reader = process.StandardOutput)
    {
        message = reader.ReadToEnd();
    }

    if (!string.IsNullOrEmpty(message))
    {
        MessageBox.Show(message);
    }
    else
    {
        using (var reader = process.StandardError)
        {
            MessageBox.Show(reader.ReadToEnd());
        }
    }
}
于 2012-06-14T20:43:14.440 に答える