2011-03-24 99 views
1

Hy ...我試圖使用WMI和C#連接到遠程計算機。 我收到一個錯誤:RPC服務器不可用。 (異常結果HRESULT:0x800706BA)。 我不知道這是否是相關的代碼,所以這是我使用的是什麼:使用WMI和C連接到遠程計算機#

serverN = InputText.Text;//serverN=IPAddress 
userN = userName.Text; 
passN = passName.Text; 
if (String.IsNullOrEmpty(serverN)) 
       serverN = "."; 
ManagementClass manC = new ManagementClass("Win32_LogicalDisk"); 
string strScope = string.Format(@"\\{0}\root\cimv2", serverN); 
ConnectionOptions conOpt = new ConnectionOptions(); 
conOpt.Username = userN; 
conOpt.Password = passN; 
manC.Scope = new ManagementScope(strScope, conOpt); 

當我試圖從manC情況下,我趕上與RPC不可用的除外。 本地它工作,所以我猜我必須在遠程計算機上進行一些設置(操作系統:Windows XP SP2)。 我已檢查,以便它允許遠程連接和我已插入命令netsh防火牆設置服務REMOTEADMIN到命令提示。 我需要設置一個域名還是一個networkid? 或者我錯過了其他東西?

回答

0

可能需要更多關於您的設置的信息。兩臺電腦都在同一個域上嗎?

你可以通過測試,如果WMI在C#嘗試它之前的工作開始。從命令提示符處嘗試以下操作以查看是否有效。

wmic /node: path Win32_logicaldisk

WMIC還可以使用與您的用戶名和密碼來測試/用戶選擇。

你可以嘗試改變在ConnectionOptions的身份驗證和模擬性能。這經常會從環境變爲環境,並可能導致連接失敗。

+0

對不起,我遲到的答覆。我已經在不同的網絡環境(沒有域設置)中試過這個程序,所以在遠程計算機上我設置了遠程訪問,Windows防火牆和防病毒程序以及另一個問題:錯誤0x80070005訪問被拒絕。在網上搜索時,我發現它可能是一個DCOM設置問題,因此試圖編輯COM Security中的限制以進行遠程啓動和遠程激活。但仍然沒有成功,無論如何感謝,因爲你花時間思考它。 – Sierra313 2011-04-05 21:14:57

0

不會顯得無禮,但:你確定在InputText.Text值是否正確?獲取「RPC服務器不可用」的一個簡單方法是爲服務器提供一個錯誤的名稱。在string.Format調用之後,可能值得在調試器中檢查'scope'的值。

BTW我以爲這只是你創建和初始化一個名爲「範圍」字符串,但通過一個名爲「strScope'to的管理範圍構造函數變量一個錯字?

+0

感謝您的建議。你是對的這是一個錯字,我已經糾正它。服務器名稱是正確的我在調試模式下檢查並使用127.0.0.1環回地址,它工作。所以它在本地運作。 – Sierra313 2011-04-05 21:16:28

0

聽起來像一個權限問題恕我直言。根據我的經驗,您需要設置一些明確的安全權限來進行遠程WMI調用。

有一個TechNet文章可以幫助:http://technet.microsoft.com/en-us/library/cc787533%28WS.10%29.aspx你設置相應的權限?

+0

非常感謝您的回覆。當然,我沒有設置權限。如果在鏈接中提到「適用於:Windows Server 2003,Windows Server 2003 R2,帶有SP1的Windows Server 2003,帶有SP2的Windows Server 2003」並且我只有XP?我爲自己的無知感到抱歉,但是我應該添加(在安全對話框中)我將要管理的「用戶」,還是相反:他們應該添加我的用戶名併爲我設置權限? – Sierra313 2011-04-05 21:15:33

3

我知道它可能會遲到,但對於其他人可能會遇到此帖: 如果您確定它不是用戶權限問題(您知道該文件夾有權限) 檢查您的「將AuthenticationLevel重新授予ConnectionOptions對象。我重複了其中的每一個,對我來說唯一可行的是PacketPrivacy選項。

ConnectionOptions conOp = new ConnectionOptions(); 
conOp.Authentication = System.Management.AuthenticationLevel.PacketPrivacy; 
0

該代碼在本地工作,因爲您已經登錄。遠程WMI連接始終需要額外的安全權限。你的第一次代碼更新應該包括模仿級別: http://msdn.microsoft.com/en-us/library/windows/desktop/aa389288%28v=vs.85%29.aspx

如果impersonationLevel不夠,那麼你的下一步應該是指定顯式憑證。那可行。還有一個選項,但我不推薦它:「授權代表」,它允許這樣一個帳戶假裝是域上的任何帳戶。

相關問題