我正在尝试从COM服务器(实际上是Motorola MeshAPI)查询某些数据,但无法初始化。使用下面的代码片段,我在管理员的命令行上运行时获得成功的数据,但使用此代码的实际程序在SYSTEM帐户下作为服务运行。使用“psexec -i -s cmd.exe”我在SYSTEM帐户下运行了代码片段,我得到了与服务相同的错误。
CreateInstance()调用失败,错误消息“服务器执行失败”,错误代码2148007941(0x80080005)。 在Windows事件查看器下的系统窗格中,我看到源“DCOM”,事件ID 10010和描述“服务器{.... GUID}未在所需超时内向DCOM注册的错误。”
我已经尝试了这个答案的提示https://stackoverflow.com/a/1157331,但我没有找到任何有助于解决这个问题。
什么会导致它在Administrator下工作但在SYSTEM下失败?如何在SYSTEM下运行时让它工作?
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();
}