2014-01-22 153 views
10

我試圖從運行命令行提示符下命令:當我在命令行控制檯鍵入從C#運行dos命令行?

"D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless" 

它可以完美運行。

但是,當我試圖使它從C#應用程序工作時,它失敗了。我試過以下,但似乎上面的命令沒有得到執行莫名其妙:

string fijiCmdText = "D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless"; 
System.Diagnostics.Process.Start("cmd.exe", fijiCmdText); 

任何人有任何想法如何改變它的工作?謝謝。

+2

它不再被稱爲DOS提示符 - 不是自1999年以來的Window * spit * ME。 – Dai

+2

請參閱編輯#3關於如何轉義的答案http://stackoverflow.com/a/5635703/231316 –

+0

好的謝謝。我做了改變。但顯然你明白,這是好:) –

回答

9

問題解決了,因爲我Chris Haas指出的方向。這並不意味着其他答案不起作用,它只是意味着問題可以至少以一種方式解決。

這是,只需在代碼中加入"/C ",它應該工作:

原來沒有工作:

string fijiCmdText = "D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless"; 
System.Diagnostics.Process.Start("cmd.exe", fijiCmdText) 

;

,工程當前代碼:

string fijiCmdText = "/C D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless"; 
System.Diagnostics.Process.Start("cmd.exe", fijiCmdText); 

這裏是克里斯哈斯提到reference。請參閱EDIT3

+2

Hello Nick,「/ C」是什麼意思? –

+0

從引用的SO鏈接:「/ C(大寫)意味着」執行任何其他通過「」。 –

7

您不必運行cmd.exe,只需創建ProcessStartInfo對象並將其參數傳遞給它。就像這樣:

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("your command", "parameters"); 

這裏是您展示如何做到這一點的例子:

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("tree.com", "/f /a"); 
System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo = info; 
p.Start(); 
p.WaitForExit(); 

所以你的情況,這是你的命令:"D:\\fiji\\fiji.exe",這是你的命令的參數或參數:@"-macro D:\\fiji\\macros\\FFTBatch.ijm --headless"

4

試試這個:

ProcessStartInfo info = new ProcessStartInfo(@"D:\fiji\fiji.exe",@"-macro D:\fiji\macros\FFTBatch.ijm --headless"); 
Process process = new Process(); 
process.StartInfo = info; 
process.Start();