2016-11-23 39 views
0

我需要从Windows窗体应用程序中打开一个外部进程。更重要的是,我需要在应用程序的运行时间内多次执行此操作。基本上,我从命令提示符多次使用参数执行.exe文件,但是我需要将文件夹更改为.exe所在的位置,以使其正常工作。 到目前为止,我打开CMD,像这样:C#在CMD中更改文件夹并启动进程,等待它完成

ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe"); 
     processStartInfo.RedirectStandardInput = true; 
     processStartInfo.RedirectStandardOutput = true; 
     processStartInfo.UseShellExecute = false; 

     Process process = Process.Start(processStartInfo); 

然后使用process.WriteLine喂到CMD命令。

process.StandardInput.WriteLine("Awin.exe -X " + filePath + "/" + fileNumber + " ID=\"" + id + "\""); 

我需要为几个fileNumber文件做这个。另外,我需要等待从输入开始的过程结束,然后再进入下一个过程。 有没有更好的方法来做到这一点,因为我没有从使用process.WaitForExit获得好结果

+0

你是什么意思*我不使用process.WaitForExit *取得了良好的效果?是否订阅['Process.Exited'](http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited.aspx)event yeild准确/可靠/ etc结果? –

+0

我的意思是,在通知WaitForExit已经完成后,从cmd调用的Awin.exe仍然继续运行,尽管WaitForExit将其注册为完成。 – Flopn

+0

与Process.Exited事件相同的结果?否则,您可以获取Awin.exe的ProcessID,并在退出时继续轮询Processes以检查ProcessID是否仍然存在 –

回答

0

ProcessStartInfo类有一个WorkingDirectory属性。

ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe"); 
processStartInfo.WorkingDirectory = your_directory 
(...) 

//do your thing 
Process process = Process.Start(processStartInfo); 

参数可以通过Arguments财产传给

+0

我试过这个,但我总是得到一个Exception,表示目录名称无效。我应该使用反斜杠而不是斜杠吗? – Flopn

+0

你可以通过试验'Directory.Exists'来获得目录名称。 – mayu