我正在写一些代码来执行远程计算机上的wmi查询和方法执行。我的登录凭据是域管理员。当我在应用程序模式下运行时,每个工作正常。当我作为服务运行时,由于默认帐户服务使用isLocal System,因此它不会工作。当我将服务设置为我的凭证运行时,远程wmi也正常工作。作为服务运行时连接到远程机器的WMI
然而,这是不可取的,所以我试图通过在IWbemLocator.ConnectServer上提供用户名和密码来连接到远程wmi服务。我能够成功取回IWbemServices对象。然而,当我试图获取类对象从IwbemServices下面对象,我得到了错误:
//IWbemServices *pSvc
const bstr_t objectPath("stdRegProv");
const bstr_t methodName("GetStringValue");
IWbemClassObject *pClass = NULL;
HRESULT hr = pSvc->GetObject(objectPath, 0, NULL, &pClass, NULL);
返回HR是0x80041003这是从这个链接“访问被拒绝”:http://msdn.microsoft.com/en-us/library/windows/desktop/aa394559%28v=vs.85%29.aspx。
通常,如果我提供了错误的用户名和密码,我将在IWbemLocator.ConnectServer上获取拒绝访问。所以我在这里有点困惑,为什么连接是好的,但我无法获得IWbemClassObject对象。由于它在使用我的域名凭证作为服务帐户时正在工作,因此必须存在一些安全性差异。我的WMI连接代码基于MSDN上的此示例代码:http://msdn.microsoft.com/en-us/library/windows/desktop/aa390418%28v=vs.85%29.aspx
我在微软论坛上打开了另一篇文章:[MS Forum](http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/4161d6a1-1b52-4aa9-98b9-eacad5ba2a90/)在这个问题上它更深入。但它仍然没有解决。 – windfly2006
您是否使用IWbemLocator.ConnectServer从远程服务器连接到第三个主机? – Lizz