我正在尝试从 COM 服务器(实际上是 Motorola MeshAPI)查询一些数据,但无法初始化。使用下面的代码片段,我在以管理员身份在命令行上运行时获得了成功的数据,但我使用此代码的实际程序作为 SYSTEM 帐户下的服务运行。使用“psexec -i -s cmd.exe”,我在 SYSTEM 帐户下运行了代码片段,我得到了与服务相同的错误。
是 CreateInstance() 调用失败,并显示错误消息“服务器执行失败”和错误代码 2148007941 (0x80080005)。在 Windows 事件查看器的“系统”窗格中,我看到源“DCOM”、事件 ID 10010 和描述“服务器 {....GUID} 未在所需超时内向 DCOM 注册”的错误。
我已经尝试了这个答案https://stackoverflow.com/a/1157331中的提示,但我没有发现任何有助于解决这个问题的方法。
什么会导致它在管理员下工作但在系统下失败,我怎样才能让它在系统下运行时工作?
HRESULT hr=S_OK;
USHORT nLinkResistance;
if (!m_MeshNetInitialised)
{
hr = m_pApiCardInterface.CreateInstance("MeshAPI.MeshNet");// mea interface smart pointer
if (SUCCEEDED(hr))
{
Sleep(1000);
m_MeshNetInitialised = true;
}
}
if (m_MeshNetInitialised)
{
hr = m_pApiCardInterface->GetIAPLinkResistance(&nLinkResistance);
if( SUCCEEDED(hr) )
{
l_retval = nLinkResistance;
}
else
{
std::wcout << L"Error getting IAPLinkResistance" << std::endl;
}
}
if (FAILED(hr))
{
_com_error err(hr);
std::wcout << err.ErrorMessage();
}