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(); |
另外,请注意,我在
1 | /C Carries out the command specified by string and then terminates. |