问题:假设当前登录用户是Administrator,已经运行了MS Excel程序,那么在Service程序中就无法通过GetActiveObject得到当前运行的MS Excel程序.发生这种问题其实是正常的,因为服务程序是系统帐号,服务程序的ROT和Administrator登录的ROT是两张列表,因不就不能得到Administrator用户的ROT,不过我在使用模拟Administrator帐号后,还是无法得到我需要的ROT,不知CSDN中有没有高手知道解决办法.在线等待...
调试欢乐多
hr = RegisterActiveObject(GetInterface(&IID_IUnknown),
clsid, NULL, &m_dwRegister);
改为以下的代码就可以了:
LPRUNNINGOBJECTTABLE lpRot = NULL;
HRESULT hr = GetRunningObjectTable(0, &lpRot);
if(lpRot != NULL)
{
IMoniker *pMoniker = NULL;
LPOLESTR szClsid = NULL;
StringFromCLSID(clsid, &szClsid);
HRESULT hr = CreateItemMoniker(L"!", szClsid, &pMoniker);
CoTaskMemFree(szClsid); if(pMoniker != NULL)
{
hr = lpRot->Register(ROTFLAGS_ALLOWANYCLIENT | ROTFLAGS_REGISTRATIONKEEPSALIVE,
GetInterface(&IID_IUnknown), pMoniker, &m_dwRegister);
pMoniker->Release();
} lpRot->Release();
}