关于cmd:从没有窗口和获取输出的C#运行命令行

Running Command Line from C# without Window and Getting Output

本问题已经有最佳答案,请猛点这里访问。

我正在尝试从C运行命令行脚本。我希望它在没有shell的情况下运行,并将输出放入字符串输出中。它不喜欢p.startinfo行。我做错什么了?我没有运行像p.startinfo.filename="yourbatchfile.bat"这样的文件,比如如何:在c_中执行命令行,获取std out结果。我需要设置"cmd.exe"和命令行字符串。我尝试过p.start("cmd.exe",strCmdText);但出现了错误:"memer"System.Diagnostics.Process.Start(String,String)'不能用实例引用访问;请用类型名来限定它。

1
2
3
4
5
6
7
8
9
    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();


这个代码给出了正确的输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();
}


您使用EDOCX1[0]不正确。查看processStartInfo类和process.Start方法()的文档。您的代码应该如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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();

另外,请注意,我在strCmdText中添加了/C参数。根据cmd /?帮助:

1
/C Carries out the command specified by string and then terminates.