2011-04-08 196 views
1

好的,就像標題所暗示的那樣,我遇到了一些麻煩......當我使用下面的代碼時,它會運行,但我可以「噸甚至使用> output.txt中得到它怎麼跑了一些狀態....從Windows應用程序運行命令行可執行文件時重定向標準輸出的問題

  ProcessStartInfo x = new ProcessStartInfo(); 
      x.FileName = "somefile.exe"; 
      x.Arguments = arg1 + " " + arg2 + " " + arg3 + " " + arg4; 
      x.WorkingDirectory = workDir; 
      x.WindowStyle = ProcessWindowStyle.Hidden; 
      Process mde = Process.Start(x); 
      mde.WaitForExit(); 

現在,有什麼困惑我的是,我在代碼中添加用於捕捉輸入的那一刻,我拋出一個異常說明我試圖運行的exe文件不存在。所以當我使用....

我究竟在做什麼錯在這裏。這就像使用useshellexecute屬性時不能設置工作目錄屬性,但從我讀的情況來看,情況並非如此。發生什麼了?爲什麼它可以在第一個示例中找到該文件並正確執行,而不是在第二個示例中執行?

回答

2

MSDN報價從http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

當UseShellExecute是假的, WorkingDirectory屬性不用於 找到可執行文件。相反,啓動 的進程使用的是 ,並且僅在新進程的 上下文中具有含義。

+0

我是否需要爲參數添加完整路徑? – James 2011-04-08 22:00:27

+0

nvm,發現我只需要將路徑添加到文件名屬性。現在效果很好,謝謝。 – James 2011-04-09 00:47:50

0

如果任何人想知道它的工作方式....

 Process x = new Process 
     { 
      StartInfo = 
      { 
       FileName = fullPathToExe, 
       Arguments = arg1 + " " + arg2 + " " + arg3 + " " + arg4, 
       WorkingDirectory = outDir, 
       WindowStyle = ProcessWindowStyle.Hidden, 
       UseShellExecute = false, 
       RedirectStandardOutput = true 
      } 
     }; 

     x.Start(); 
     string output = x.StandardOutput.ReadToEnd(); 
     x.WaitForExit(); 

它仍然閃爍彈出一個窗口,但我想createnowindow = true,將解決這個問題。我想我會發布代碼以防其他人需要它。

相關問題