我正在尝试从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();
答案 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 Class和Process.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 /?