2011-03-24 76 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不够,那么你的下一步应该是指定显式凭证。那可行。还有一个选项,但我不推荐它:“授权代表”,它允许这样一个帐户假装是域上的任何帐户。

相关问题