2011-04-04 69 views
2

嘿所有, 我想在遠程機器上運行一個exe文件(不是從,但是在)。嘗試使用psexec(c#)在遠程運行.exe時出現問題?

我有非常簡單的代碼如下:

ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools"); 
info.FileName = "psexec \\\\" + machine.Name + "\\C\\Program Files\\test.exe"; 
info.RedirectStandardOutput = true; 
info.UseShellExecute = false; 
Process p = Process.Start(info); 

當試圖運行此代碼我收到「系統找不到指定文件」的錯誤。

  1. 在指定的目錄上有一個名爲「test.bat」的文件。
  2. 遠程計算機位於同一個域中,C文件夾已共享(我是管理員)。
  3. 我將PsTools安裝並配置爲環境變量。
  4. 我試過了各種各樣的代碼(例如,如果我不在ProcessStartInfo構造函數和FileName屬性上使用「psexec」,bat文件在本地計算機上運行而不是在遠程計算機上運行......)作品!

有什麼想法嗎?

+0

當您從命令行運行psexec時,是否設法讓它工作?我懷疑這是第一次嘗試。 – 2011-04-04 06:33:19

+0

恩,是不是因爲你在「\\ C \\ Program Files \\ test.exe」中缺少一個冒號? – 2011-04-07 15:53:59

回答

3

我的猜測是它沒有找到psexec,因爲你已經設置UseShellExecute爲false。嘗試給出psexec.exe的完整路徑。

你也應該設置FileName屬性只是要啓動的文件,並且Arguments財產的命令行參數,就像這樣:

ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools"); 
info.FileName = @"c:\whatever\psexec.exe"; 
info.Arguments = @"""\\" + machine.Name + @"\C\Program Files\test.exe"""; 
info.RedirectStandardOutput = true; 
info.UseShellExecute = false; 
Process p = Process.Start(info); 

請注意,我也Arguments屬性中添加了雙引號,這樣它就不會被拆分爲兩個參數,這是由於「程序文件」中有一個空格。

+0

嗯,我對這個網站很陌生,所以我已經發布了我的答案:\ – Amit 2011-04-04 07:17:33

+0

@Amit標記答案以及答案,如果您通過點擊箭頭下方的「打勾」滿意答案。 – manojlds 2011-04-14 02:21:47

相關問題