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();
}