2012-09-19 138 views
3

我知道這個問題以前已經問,我曾嘗試在之前的帖子中給出的所有解決方案,但我似乎無法使它發揮作用: -執行批處理文件默默

static void CallBatch(string path) 
     { 
      int ExitCode; 
      Process myProcess; 

      ProcessStartInfo ProcessInfo; 
      ProcessInfo = new ProcessStartInfo("cmd.exe", "/c " + path); 
      ProcessInfo.CreateNoWindow = true; 
      ProcessInfo.UseShellExecute = true; 

      myProcess = Process.Start(ProcessInfo); 
      myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      myProcess.WaitForExit(); 

      myProcess.EnableRaisingEvents = true; 
      myProcess.Exited += new EventHandler(process_Exited); 

      ExitCode = myProcess.ExitCode; 

      Console.WriteLine("ExitCode: " + ExitCode.ToString(), "ExecuteCommand"); 
      myProcess.Close(); 
     } 

當我嘗試調用批處理文件,即使createNoWindow和UseShellExecute都設置爲true,它仍會顯示窗口。

我應該讓其他東西讓它默默地運行批處理文件嗎?

回答

4

試試這個:

Process myProcess = new Process(); 
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
myProcess.StartInfo.CreateNoWindow = true; 
myProcess.StartInfo.UseShellExecute = false; 
myProcess.StartInfo.FileName = "cmd.exe"; 
myProcess.StartInfo.Arguments = "/c " + path; 
myProcess.EnableRaisingEvents = true; 
myProcess.Exited += new EventHandler(process_Exited); 
myProcess.Start(); 
myProcess.WaitForExit(); 
ExitCode = myProcess.ExitCode; 

的想法是無法操縱myProcess.StartInfo您是否啓動過程後:它是無用的。您也不需要將UseShellExecute設置爲true,因爲您是通過調用cmd.exe自己啓動shell的。

+0

當我用這段代碼替換它時,會出現一個cmd窗口,應用程序停止。這些窗口上沒有輸出。 – user1439090

+0

@ user1439090非常好奇......您是否嘗試爲'FileName'設置'path',完全繞過'cmd',還是您嘗試運行的批處理文件? – dasblinkenlight

+0

路徑是批處理文件的路徑。在我的情況下,批處理文件與exe文件存在於同一個文件夾中,所以我只是將批處理文件的名稱作爲參數傳遞。 – user1439090