2013-01-21 77 views
0

我寫了一個wmi應用程序,它在遠程機器上運行批處理文件。在遠程機器上運行命令

該批處理文件將輸出寫入傳遞給它的目錄字符串作爲參數。

當我啓動我的應用程序,並選擇驅動器C作爲輸出目錄時,一切正常。 但是,當我選擇網絡驅動器時,由於某種原因它不起作用。

(此網絡驅動器是公司的用戶驅動器,並映射爲網絡上的每個用戶)。

如果我跑完全相同的命令(網絡驅動器)從遠程計算機中手動,它也可以...

ConnectionOptions connOptions = new ConnectionOptions(); 
connOptions.Impersonation = ImpersonationLevel.Impersonate; 
connOptions.Username = sUsername; 
connOptions.Password = sPassword; 
connOptions.Authority = "NTLMDomain:" + sDomain; 
connOptions.EnablePrivileges = true; 
ManagementScope manScope = new ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2", sHost), connOptions); 
manScope.Connect(); 
ManagementPath managementPath = new ManagementPath("Win32_Process"); 
ManagementClass processClass = new ManagementClass(manScope, managementPath, objectGetOptions); 
ManagementBaseObject inParams = processClass.GetMethodParameters("Create"); 

for (int i = 0; i < listOfJobs.Items.Count; i++) 
{ 
    listOfJobs.SetSelected(i, true); 
    inParams["CommandLine"] = listOfJobs.SelectedItem.ToString(); 
    ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null); 
} 

作業字符串例子:

工作腳本:C:\腳本\ BatchScript -p C:\試驗C:\ OutputDir

失敗腳本:C:\腳本\ BatchScript -p C:\試驗U:\ OutputDir

任何想法?

+0

你應該發佈代碼以幫助人們回答你的問題。 –

+0

請看一些代碼。 – Derek

+0

添加了代碼... – Idanis

回答

0

將ImpersonationLevel設置爲委託。模擬只允許一個網絡躍點,即服務器只能訪問本地文件或訪問客戶端上的文件。要訪問第三臺機器(網絡驅動器)意味着另一跳,因此需要委託。

+0

我做過了,所以現在我得到一個異常:'應用程序調用了一個接口,該接口被編組爲另一個線程。 (異常來自:HRESULT:0x80010010E(RPC_E_WRONG_THREAD))' – Idanis

+0

我猜在遠程調用後,用戶界面有一些更新?嘗試使用UI元素的Dispatcher.RunAsync方法。我現在正在離開我的舒適區,所以如果你仍然陷入困境,也許這需要一個新的問題... – NigelK

+0

試圖尋找一種方法來做你的建議,但沒有找到它...這顯示編譯錯誤:'var dispatcher.RunAsync(CoreDispatcherPriority.Normal,()=> { ManagementBaseObject outParams = processClass.InvokeMethod(「Create」,inParams,null);' – Idanis