2012-06-27 32 views
1

我試圖在C#中的Winform .NET 4.0中腳本多個遠程桌面連接。在Windows Server 2003 r2上從Winform啓動mstsc.exe

鑑於_serverList服務器名稱的列表,

 var startInfo = new ProcessStartInfo 
     { 
      FileName = "cmd.exe", 
      RedirectStandardInput = true, 
      RedirectStandardOutput = true, 
      UseShellExecute = false, 
      CreateNoWindow = false 
     }; 

     var process = new Process { StartInfo = startInfo }; 

     process.Start(); 

     foreach (string server in _serverList) 
     { 

      process.StandardInput.WriteLine(@"mstsc.exe /v:" + server);   
     } 

當我在我的本地桌面(Windows 7)中其工作完全正常運行它:所有服務器推出,但一旦我端口的應用程序到服務器(Windows Server 2003 R2和觸發這種情況發生時, 我得到的錯誤

「的mstsc.exe」未被識別爲一個內部或外部命令,可操作的程序或批處理文件

事件

我嘗試了提供mstsc.exe完整路徑的變體,將FileName =「mstsc.exe」更改並將服務器名稱作爲參數提供,但都不起作用。

當我在服務器上啓動cmd.exe並手動輸入「mstsc.exe/v:someservername」時,其行爲如預期的那樣啓動了正確的服務器。

任何有識之士到了什麼錯誤。當UseShellExecute設置爲false,將不勝感激

+0

你所說的「觸發此發生的事件」呢? –

+0

你的應用程序以誰的身份運行?您是以用戶還是管理員身份登錄到服務器? – Hammerstein

+0

也許是一個明顯的問題,但是你能夠從該機器上的命令行運行mstsc嗎? –

回答

0

,則必須在設置FileName屬性時提供完整路徑executeable,環境變量無法正常工作。在Windows Server 2003 R2上搜索「mstsc.exe」的位置。對Windows 7做同樣的事情。這些路徑可能會有所不同,這可以解釋問題。

使用一個輔助類如OperatingSystem有選擇性地選擇基於這樣的差異操作系統,處理器(例如86目錄)),%systemroot%環境的差異等等,那麼你可以設置適當的值在一個app.config正確的路徑。

+1

在服務器上執行mstsc.exe的確切路徑是我以前嘗試過的一種方式,當用「C:\ Windows \ system32 \ MSTSC.exe」替換「mstsc.exe」時會產生相同的問題 –

+0

@KevinZhou - 確保將此值設置爲FileName屬性,並且在包含空格的任何路徑(包括參數)周圍使用引號。該錯誤表示路徑不正確。你只需要弄清楚爲什麼路徑不好。 –

0

我能夠運行您在Windows Server 2012 R2上提供的很好的代碼。這裏有可能在操作系統中存在一些安全機制。您是否嘗試過手動升級可執行文件的權限?

如果這樣的作品你可以看看這個帖子:

Elevating process privilege programmatically?

相關問題