2

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

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

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

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

4

1 回答 1

0

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

于 2012-07-28T03:43:31.460 回答