【问题标题】:Connect to remote computer using WMI and C#使用 WMI 和 C# 连接到远程计算机
【发布时间】:2011-03-24 23:39:08
【问题描述】:

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 插入到命令提示符中。 我需要设置域名或networkid吗? 或者这是我缺少的其他东西?

【问题讨论】:

    标签: c# wmi


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      您可以先测试 WMI 是否正常工作,然后再在 C# 中尝试它。在命令提示符下尝试以下操作,看看是否有效。

      wmic /node: path Win32_logicaldisk

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

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

      【讨论】:

      • 抱歉我的回复晚了。我已经在不同的网络环境(未设置域)中尝试了该程序,所以在我设置远程访问、Windows 防火墙和防病毒例外的远程计算机上出现了另一个问题:错误 0x80070005 访问被拒绝。上网查了一下,发现可能是DCOM设置问题,于是尝试在COM安全中编辑远程启动和远程激活的限制。但仍然没有成功,无论如何感谢您花时间考虑。
      【解决方案3】:

      看起来并不粗鲁,但是:您确定 InputText.Text 中的值是正确的吗?获得“RPC 服务器不可用”的一种简单方法是为服务器提供一个坏名称。在 string.Format 调用之后,在调试器中检查 'scope' 的值可能是值得的。

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

      【讨论】:

      • 感谢您的建议。你是对的,这是一个错字,我已经更正了。服务器名称是正确的,我在调试模式下检查并使用 127.0.0.1 环回地址,它工作正常。所以在本地它可以工作。
      【解决方案4】:

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

      有一篇 TechNet 文章可能会有所帮助:http://technet.microsoft.com/en-us/library/cc787533%28WS.10%29.aspx 你设置了适当的权限了吗?

      【讨论】:

      • 非常感谢您的回复。绝对是我没有设置权限。如果链接中显示“适用于:Windows Server 2003、Windows Server 2003 R2、带有 SP1 的 Windows Server 2003、带有 SP2 的 Windows Server 2003”并且我只有 XP,这是否有问题?我很抱歉我的无知,但我应该添加(在安全对话框中)我要管理的“用户”还是相反:他们应该添加我的用户名并为我设置权限?
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多