使用WMI和C#连接到远程计算机

时间:2011-03-24 23:39:08

标签: c# wmi

Hy ...我正在尝试使用WMI和C#连接到远程计算机。 我收到一个错误:RPC服务器不可用。 (异常结果HRESULT:0x800706BA)。 我不知道这是否与代码有关,所以这就是我正在使用的内容:

 
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 firewall set service RemoteAdmin 插入命令提示符。 我需要设置域名还是联网? 或者这是我想念的其他东西?

5 个答案:

答案 0 :(得分:3)

我知道这对你来说可能会迟到,但对于那些可能在这篇文章中偶然发现的人: 如果您确定它不是用户权限问题(您知道该文件夹具有权限) 检查您作为AuthenticationLevel提供给ConnectionOptions对象的内容。我遍历了其中的每一个,对我来说唯一有效的是PacketPrivacy选项。

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

答案 1 :(得分:0)

可能需要有关您的设置的更多信息。这两台计算机是否在同一个域上?

您可以先在C#中尝试WMI之前测试WMI是否正常工作。从命令提示符处尝试以下操作,看看是否有效。

wmic /node: path Win32_logicaldisk

wmic还有一个/ user选项,您可以使用它来测试您的用户名和密码。

您可以尝试更改ConnectionOptions上的身份验证和模拟属性。这通常会从环境变为环境,并可能导致连接失败。

答案 2 :(得分:0)

不显得粗鲁但是:你确定InputText.Text中的值是否正确?获得“RPC服务器不可用”的一种简单方法是为服务器提供错误的名称。在string.Format调用之后,可能值得检查调试器中“scope”的值。

顺便说一句我认为这只是一个错字,你正在创建并初始化一个名为'scope'的字符串,但是将一个名为'strScope'的变量传递给ManagementScope构造函数?

答案 3 :(得分:0)

听起来像权限问题恕我直言。根据我的经验,您需要设置一些显式安全权限才能进行远程WMI调用。

有一篇TechNet文章可能有所帮助:http://technet.microsoft.com/en-us/library/cc787533%28WS.10%29.aspx您是否设置了相应的权限?

答案 4 :(得分:0)

代码在本地运行,因为您已经登录。远程WMI连接始终需要其他安全权限。您的第一个代码更新应包括impersonationLevel: http://msdn.microsoft.com/en-us/library/windows/desktop/aa389288%28v=vs.85%29.aspx

如果impersonationLevel不够,那么下一步应该是指定显式凭据。那可行。还有一个选项,但我不推荐它:"委托权限",允许这样的帐户伪装成域名上的任何帐户。