将参数传递给ProcessStartInfo类

时间:2012-06-14 20:29:19

标签: c# .net processstartinfo redirectstandardoutput

我想使用Process.Start调用命令提示符命令然后使用StandardOutput我想在我的应用程序中使用StreamReader读取但是当我运行下面的程序时,在MessageBox中我只找到路径直到Debug,我的命令我在论证中说过并不是代理人。

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());
            }

这里我的net view命令永远不会执行。

2 个答案:

答案 0 :(得分:4)

如果要使用cmd运行命令,则还必须指定/c参数:

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

但是,在这种情况下,您根本不需要cmdnet是一个本机程序,可以按原样执行,没有shell:

new ProcessStartInfo("net", "view");

答案 1 :(得分: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());
        }
    }
}