[英]Start process with WMI on remote machine from a share on another remote machine
[英]Using WCF to start a remote process by WMI
我想通過從WCF服務調用WMI在遠程計算機上啟動一個進程(非交互式,小型控制台應用程序)。 這是用戶將從Web應用程序運行的WCF操作。
我實現了codeproject中的代碼,並且對InvokeMethod函數的操作失敗。 錯誤是“訪問被拒絕。 (來自HRESULT的異常:0x80070005(E_ACCESSDENIED)”。
我使用WBEMTEST工具測試了WMI連接,它在同一域和另一域中的PC上都可以與同一組參數(到遠程服務器的路徑,用戶名/密碼,要運行的應用程序的路徑)一起使用,效果很好。 像本教程中一樣設置用於模擬的帳戶。 由於它與WBEMTEST一起使用,因此在使用WCF進行此調用時是否需要檢查某些特定的事項? 我讀到在web.config的診斷部分將wmiProviderEnabled設置為'true'可能會有所幫助,但沒有幫助。
最后,我能夠解決此問題。
首先,我將本文在“啟用WMI”和“安全性”段落中描述的所有內容應用於配置。 這還不夠,在我的調查中,我發現上述codeproject源代碼中可能存在錯誤。 在ProcessMethod類中的StartProcess函數中,未將connectionScope添加到ManagementClass中。 因此,我向構造函數添加了ManagementScope connectionScope參數,然后填充了processTask.Scope。 請看看我更新的StartPtocess函數:
public static int StartProcess(string machineName, string processPath, ManagementScope connnectionScope, int timeout)
{
ManagementClass processTask = new ManagementClass(@"\\" + machineName + @"\root\CIMV2",
"Win32_Process", null);
processTask.Scope = connnectionScope;
ManagementBaseObject methodParams = processTask.GetMethodParameters("Create");
methodParams["CommandLine"] = processPath;
InvokeMethodOptions options = new InvokeMethodOptions();
options.Timeout = TimeSpan.FromSeconds(timeout);
ManagementBaseObject exitCode = processTask.InvokeMethod("Create", methodParams, null);
return Convert.ToInt32(exitCode["ReturnValue"].ToString());
}
ManagementScope在ProcessLocal / ProcessRemote構造函數中創建。
這解決了我的問題。 希望它可以幫助某人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.