2016-05-12 55 views
3

我試圖在使用WMI的遠程服務器上執行程序。C#WMI遠程程序無法正確執行

當我執行我的代碼時,我可以看到可執行文件出現在遠程服務器上的任務管理器的進程選項卡中,但它從未實際執行其功能。當它運行正常時,應該在特定文件夾中有一些文件,但是當我從我的程序運行它時沒有任何文件。

此外,我檢查從WMI報告的結果,我得到的代碼爲0,我相信這表明沒有錯誤。

我已經發布了下面的代碼。如果我的代碼中的某些內容沒有明顯錯誤,那麼我會很樂意就如何解決此問題提供建議,因爲我是WMI進程的新手。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 
using System.ComponentModel; 
using System.IO; 
using System.Configuration; 
using System.Diagnostics; 
using System.Management; 

namespace ExecuteNetworkResources 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var processToRun = new[] { "C:\\Program Files\\TestApplication\\mscombine.exe -c -cwa" }; 
      var connection = new ConnectionOptions(); 
      connection.Username = "domain\\user1; 
      connection.Password = "password"; 
      var wmiScope = new ManagementScope(String.Format(@"\\{0}\root\cimv2", "Server1"), connection); 
      var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions()); 
      object result = wmiProcess.InvokeMethod("Create", processToRun); 
      Console.WriteLine("Returned: " + result); 
      Console.ReadLine(); 

     } 
    } 
} 
+0

遠程服務器是否具有'WMI enabled'您可以遠程調試..?如果沒有,那麼重構代碼添加一些日誌記錄和一些錯誤陷阱..這不應該花你很長的時間來實現幾行代碼..還請聯繫遠程服務器管理員,看看他們是否已經啓用WMI可能是一個權限問題在你的本地機器外面工作.. – MethodMan

回答

0

我在回答這個問題,所以我可以將它標記爲MethodMan的答案。他說得對,我們的服務器團隊說它已關閉。

1

您能夠看到遠程機器中任務管理器中的進程意味着WMI執行成功。現在文件未被創建的問題是因爲遠程進程創建方法運行會話0中的進程。這是一個非交互式桌面會話。

這可能會限制進程訪問文件系統的權限。這就是爲什麼你沒有得到任何錯誤,但從過程中的行動只是被忽略。您需要明確指定它在連接選項,以使previleges:

 ConnectionOptions connection = new ConnectionOptions() { 
      EnablePrivileges = true 
     }; 

這將使訪問文件系統,如果它被用於連接用戶擁有足夠的權限。

+0

我會盡快嘗試並提供反饋。 – WorkJ

+0

WMI已關閉,但我對此投票贊成,因爲我的代碼中沒有這樣的內容,這與建立良好連接有關。我不明白如果WMI關閉,我可以如何連接並查看應用程序。 – WorkJ

+0

你提到它正在調用遠程機器上的進程,所以我認爲這是來自工作代碼的示例代碼片段。我觀察到的另外一個缺失的地方是'wmiScope.Connect();'方法調用。 – vendettamit