2016-11-23 33 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