2010-05-11 124 views
1

我需要從.NET Windows應用程序執行命令行。 我試圖與該代碼,但我得到錯誤從windows應用程序執行命令行

「C:\文件」沒有被識別爲一個 內部或外部命令,可操作 程序或批處理文件。

var command ="\"C:\\Documents and Settings\\Administrator\\My Documents\\test.exe\" \"D:\\abc.pdf\" \"C:\\Documents and Settings\\Administrator\\My Documents\\def.pdf\""; 

var processInfo = new ProcessStartInfo("cmd","/c " + command) 
{ 
    UseShellExecute = false, 
    RedirectStandardError = true, 
    CreateNoWindow = true 
}; 
var p = Process.Start(processInfo); 

回答

6

我不認爲你需要掏出來cmd。只需直接調用EXE:

var command ="\"C:\\Documents and Settings\\Administrator\\My Documents\\test.exe\" \"D:\\abc.pdf\" \"C:\\Documents and Settings\\Administrator\\My Documents\\def.pdf\""; 
var processInfo = new ProcessStartInfo(command) 
         { 
          UseShellExecute = false, 
          RedirectStandardError = true, 
          CreateNoWindow = true 
         }; 
var p = Process.Start(processInfo); 
6

嘗試使用Process.Start重載版本,並在第二個參數傳遞的參數。

var command = @"C:\Documents and Settings\Administrator\My Documents\test.exe"; 
var parameters = @"""D:\abc.pdf"" ""C:\Documents and Settings\Administrator\My Documents\def.pdf"""; 

var p = Process.Start(command, parameters); 

這是假設您正在嘗試使用pdf文件作爲參數調用test.exe。

0

除了這個事實,你不需要通過cmd.exe開始你的過程(在另一個答案已經提到過),我認爲你需要從過程開始的名稱分隔命令行參數;即。嘗試與此類似:

var command = @"C:\...\test.exe"; 
var arguments = @"D:\abc.pdf ..."; 

var processInfo = new ProcessStartInfo(command, arguments) 
        { 
         CreateNoWindow = true, 
         ... // add other options as needed 
        }; 

var p = Process.Start(processInfo); 

正如你所看到的,可執行文件的名稱和命令行參數陸續進入ProcessStartInfo構造的獨立參數。 (你顯然需要把適當的字符串放回去;爲了清楚起見,我簡化了它們。)