如何使用cmd窗口在C#中启动外部进程

时间:2011-07-17 11:07:36

标签: c# .net

我在使用Process.Start

执行外部控制台应用程序时遇到问题
Process p = new Process();
p.StartInfo.WorkingDirectory = "dump";
p.StartInfo.FileName = "test.exe";
p.StartInfo.Arguments = s;
p.Start();

当p生成的参数执行时,外部应用程序崩溃,但如果我在命令行窗口中复制完全相同的参数,它运行正常。

所以我的问题是如何创建命令窗口的新实例,然后添加命令test.exe + s来运行?

如此有效地我启动cmd然后将我的参数添加到它

4 个答案:

答案 0 :(得分:3)

如果您想通过cmd运行test.exe prm1 prm2,请使用cmd.exe /c test.exe prm1 prm2。虽然我真的不明白这与崩溃有什么关系。听起来问题出在test.exe上 - 找出导致崩溃的原因,这有助于您修复C#代码,这样就不需要cmd

我要检查的其中一个地方是工作目录。当您将其设置为“dump”时,您确定当前目录是您所期望的吗?首先尝试使用完整路径。 test.exe可能恰好在系统路径中,因此它会被执行,但它的工作目录不是它所期望的,这会导致它崩溃。

答案 1 :(得分:2)

试试这个:

ProcessStartInfo processToRunInfo = new ProcessStartInfo();    
processToRunInfo.Arguments = "Arguments");
processToRunInfo.CreateNoWindow = true;
processToRunInfo.WorkingDirectory = "C:\\yourDir\\";
processToRunInfo.FileName = "test.exe";
//processToRunInfo.CreateNoWindow = true;
//processToRunInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process process = new Process();
process.StartInfo = processToRunInfo;
process.Start();

答案 2 :(得分:1)

Process p = new Process();
p.StartInfo.WorkingDirectory = "/full/path/to/dump";
p.StartInfo.FileName = "/full/path/to/test.exe";
p.StartInfo.Arguments = s; // will call 'text.exe s'
p.Start();

答案 3 :(得分:0)

看看MSDN

您需要创建StartInfo类的实例和用户Start(),例如

ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
Process.Start(startInfo);
startInfo.Arguments = "www.example.com";
Process.Start(startInfo);

试试吧!

重写代码看起来像这样:

ProcessStartInfo startInfo = new ProcessStartInfo("test.exe");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
startInfo.WorkingDirectory = "dump";
startInfo.Arguments = "s";
Process.Start(startInfo);