如何在调用ManagementScope.Connect()时解决UnauthorizedAccessException问题

时间:2012-06-07 21:33:54

标签: c# .net-4.0 wmi access-denied dcom

我正在寻找从系统中收集有关远程WMI呼叫失败原因的更多信息的想法。

Which permissions/rights does a user need to have WMI access on remote machines?中的详细步骤很有帮助,但要么我不小心错过了某些内容,要么还需要为我的环境配置更多内容。

当我运行.NET 4.0 C#代码(下面的代码段)时,我看到以下异常:

  

System.UnauthorizedAccessException发生Message = Access is   否认。 (HRESULT异常:0x80070005(E_ACCESSDENIED))
  Source = System.Management StackTrace:          在System.Management.ThreadDispatch.Start()          在System.Management.ManagementScope.Initialize()          在System.Management.ManagementScope.Connect()          在MyNamespace.MyClass.GetWmiInfo()in ...

这是发生错误的代码。调用Connect()时会抛出异常。

var scope = new ManagementScope("\\\\HOSTNAME\\root\\cimv2")
{
    Options =
    {
        Impersonation = ImpersonationLevel.Impersonate,
        Password = "password",
        Username = "domain\\username"
    }
};

scope.Connect();

代码在Windows 7计算机上运行,​​WMI连接的目标是Windows XP计算机。 注意:如果我颠倒这两个角色,我会发现类似的问题。

我没有在目标计算机的安全日志中看到任何错误。

如果我将其凭据正在使用的用户添加到目标计算机上的Administrators组,则对Connect()的调用成功,因此问题似乎确实是由于尚未提供的权限或访问权限理所当然的。

通常当我遇到访问被拒绝的错误时,我可以在日志中找到一个提供更多细节的条目,或者能够运行 regmon filemon 捕获一些有用的信息。但是由于这个WMI / DCOM错误,我不知道还能在哪里寻找更多信息。

任何建议都非常感谢!

更新:我使用WBEMTest.exe进行了测试,发现访问权限也被拒绝,除非我以管理员身份运行。我正在尝试继续使用此工具来进一步隔离问题。

0 个答案:

没有答案