从C#运行命令行没有窗口和获取输出

时间:2016-02-23 15:33:58

标签: c# cmd

我正在尝试从C#运行命令行脚本。我希望它在没有shell的情况下运行并将输出放入我的字符串输出中。它不喜欢p.StartInfo行。我究竟做错了什么?我没有运行像p.StartInfo.FileName =“YOURBATCHFILE.bat”这样的文件,如How To: Execute command line in C#, get STD OUT results。我需要设置“CMD.exe”和命令行字符串。我试过p.Start(“CMD.exe”,strCmdText);但这给了我错误:“Memer'System.Diagnostics.Process.Start(string,string)'无法使用实例引用访问;请使用类型名称限定它。”

    string ipAddress;
    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    string strCmdText;
    strCmdText = "tracert -d " + ipAdress;
    p.StartInfo("CMD.exe", strCmdText);
    string output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

2 个答案:

答案 0 :(得分:4)

此代码为我提供了正确的输出。

const string ipAddress = "127.0.0.1";
Process process = new Process
{
    StartInfo =
    {
        UseShellExecute = false,
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        CreateNoWindow = true,
        FileName = "cmd.exe",
        Arguments = "/C tracert -d " + ipAddress
    }
};
process.Start();
process.WaitForExit();
if(process.HasExited)
{
    string output = process.StandardOutput.ReadToEnd();
}

答案 1 :(得分:1)

您错误地使用了StartInfo。查看ProcessStartInfo ClassProcess.Start Method ()的文档。您的代码应如下所示:

string ipAddress;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
string strCmdText;
strCmdText = "/C tracert -d " + ipAdress;

// Correct way to launch a process with arguments
p.StartInfo.FileName="CMD.exe";
p.StartInfo.Arguments=strCmdText;
p.Start();


string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();

另外,请注意我向/C添加了strCmdText参数。根据{{​​1}}帮助:

cmd /?