【问题标题】:Access denied when attempting remote WMI calls from a service尝试从服务进行远程 WMI 调用时访问被拒绝
【发布时间】:2012-07-26 17:39:46
【问题描述】:

我有一个 C# 应用程序,它通过 WMI 连接到许多远程系统,包括域中的和独立的。该程序为 wmi 提供凭据并使用模拟。手动运行(从控制台)时,它连接良好,一切都很好。但是,当从服务(以本地用户身份运行)调用同一个 .exe 时,它​​在 ManagementScope 上调用 Connect() 时总是得到 0x80070005 (E_ACCESSDENIED)。

我进行了相当多的搜索,发现了许多关于类似主题的看似有用的文章,但没有一个有用。 This one 和他在 MS 网站上的 [后续帖子][2] 非常相似,只是我的失败发生在连接时,而不是尝试运行查询时,所以感觉像是本地系统权限问题。

我弄乱了 DCOM 权限、WMI 远程处理权限、模拟选项、策略选项、Windows 防火墙等等,但都没有结果。有没有人可以帮忙?

编辑:通过更多的挖掘,我发现了来自 MS 的this small page,这确实表明我的错误 (0x80070005) 是连接期间发生的 DCOM 问题,而不是 WMI 错误。他们给出的原因是 1. 凭据失败,或 2. DCOM 启动/远程激活权限。由于我的程序在使用相同的凭据手动运行时可以正常工作,因此我必须假设它是 DCOM 问题。我已设置远程/本地激活和启动以允许系统、本地服务、交互和管理员,但它仍然失败。由于该服务作为本地系统运行,我认为这些设置就足够了。

【问题讨论】:

  • 您解决了这个问题吗?类似的问题在这里。

标签: c# wmi dcom


【解决方案1】:

我可能过于简单化或没有完全理解您的问题,但在我看来,如果您尝试通过仅具有来自计算机的凭据的服务访问 远程 WMI 提供程序本地帐户,这样的努力总是会失败(按设计)。没有从 MACHINE\account 到 OTHERMACHINE\account 或 DOMAIN\account 的身份验证路径。再次,如果我过于简单化或误解,我很抱歉。

【讨论】:

  • 嗨,大卫,感谢您的回复。如果我没有更清楚地说明我的情况,我深表歉意。 c# 应用程序确实为远程机器提供身份验证/凭据,并且不依赖于域/机器帐户信任。事实上,目标计算机既位于源域之内,也位于源域之外。我也尝试在独立 (XP) 工作站上运行它,但它以同样的方式失败。这更有意义吗?
  • 这可能是你已经采取的路径,但我想我会花一些时间在源机器和目标机器上设置 ProcMon 的副本,启动你的服务,然后让ProcMon 会收集结果以准确地查看失败发生的时间。它可能会让您更好地了解需要将修复重点放在哪里。
猜你喜欢
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 2023-03-12
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
相关资源
最近更新 更多