2011-08-10 124 views
3

我有一個程序,我要做到以下幾點:執行命令C#不工作

  1. 獲取文件上(型號未知)
  2. 文件保存在本地
  3. 執行一些指令(未知)文件

我有步驟1和2的照顧,但我掙扎在第3步中我使用下面的代碼:

注:文件類型和命令只是用於測試

//Redirects output 
procStart.RedirectStandardOutput = false; 
procStart.UseShellExecute = true; 
procStart.FileName = "C:\\Users\\Me\\Desktop\\Test\\System_Instructions.txt"; 
procStart.Arguments = "mkdir TestDir"; 

//No black window 
procStart.CreateNoWindow = true; 

Process.Start(procStart); 

.txt文件將打開,但該命令將不會運行(會出現在test文件夾中沒有testDir

建議?

+0

你從哪裏得到這個錯誤?這絕對是源自編譯的代碼行的異常,而不是在直接窗口中輸入的語句? – Justin

+0

我與Kragen就這一問題達成了共識:那個錯誤通常意味着你已經在當地人或觀看窗口中觀看了某些東西,或者通過直接窗口檢查了一個表情。我假設你這樣做是因爲代碼不工作,但我不認爲這個錯誤信息是你的實際問題。 – dlev

+0

@Keragan - 當我在調試器中運行程序時,出現'Response.End()'行錯誤,我刪除了像@Davide這樣的行,提示我沒有收到任何錯誤,但是目錄沒有創建 –

回答

2

我認爲問題在於您的Process設置不正確。

您當前的代碼將使用默認的.txt文件的揭幕戰(因爲你指定procStart.UseShellExecute = true;),那麼您可以設置procStart.Arguments = "mkdir TestDir";但是,這並不是真正會幫助你,因爲這一切會發生是"mkdir TestDir"會被傳遞打開.txt文件命令行參數爲notepad.exe

你真正想要的是兩種:

  1. 單獨ProcessStartInfo設置爲cmd.exeFileName(並設置Arguments = "/C mkdir Test"
  2. 直接使用的CreateDirectory()方法。

我寧願#2,因爲它更清楚地表明你想要做什麼,但是要麼應該工作。

UPDATE:如果您需要使用選項1,那麼你應該使用下面的代碼,看看有什麼地方出了錯:

Process userCommandProc = Process.Start(procStart); 
userCommandProc.WaitForExit(); 

if (userCommandProc.ExitCode != 0) 
{ 
    // Something has (very likely) gone wrong 
} 
else 
{ 
    // Most likely working 
} 

一對夫婦的其他注意事項:

  1. 這個過程會在服務器上運行,而不是在客戶端計算機上運行。如果你需要後者,如果你想使用一個網絡應用程序,你運氣不好。
  2. 這種處理可能更好的是留在標準的.ashx處理程序,然後是網頁;頁面加載應該儘可能快。
+0

我想要做的第一件事是你提到的(因爲我不知道該命令將會怎樣,我已經編輯了下面的代碼:ProcessStartInfo procStart = new ProcessStartInfo() ; procStart.RedirectStandardOutput = false; procStart.FileName =「cmd.exe」; procStart.Arguments =「/ C mkdir TestDir」; procStart.CreateNoWindow = true; Process.Start(procStart);'但目錄仍然沒有創建 –

+0

@Peppered我已經更新了一些更多信息的答案 – dlev

+0

感謝您的幫助,我運行了您添加的代碼,並且得到了'1'的ExitCode,所以代碼有問題,我將不得不做一些更多的研究,看看發生了什麼問題 –