_______高手快来呀!!!如何在Service中调用GetActiveObject得到当前用户的ROT

dongfa 2004-09-01 03:02:43
问题:假设当前登录用户是Administrator,已经运行了MS Excel程序,那么在Service程序中就无法通过GetActiveObject得到当前运行的MS Excel程序.

发生这种问题其实是正常的,因为服务程序是系统帐号,服务程序的ROT和Administrator登录的ROT是两张列表,因不就不能得到Administrator用户的ROT,不过我在使用模拟Administrator帐号后,还是无法得到我需要的ROT,不知CSDN中有没有高手知道解决办法.在线等待...
...全文
160 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongfa 2004-09-02
  • 打赏
  • 举报
回复
过会就结帖了,分只能给进来的朋友了.:)
dongfa 2004-09-02
  • 打赏
  • 举报
回复
我自己解决了,和大家分享一下吧.

注册活动对象时要加上ROTFLAGS_ALLOWANYCLIENT | ROTFLAGS_REGISTRATIONKEEPSALIVE 两个标志,这样服务程序就能够找到了.

原来的代码:
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();
}
dongfa 2004-09-02
  • 打赏
  • 举报
回复
希望版主能把这个问题置顶,谢谢~~~~
zhushizu 2004-09-01
  • 打赏
  • 举报
回复
对对对.和楼主一样...这个问题也是让我百思不得其解...帮楼主顶一下.....希望可以有高手可以解决这个问题
huaboy408 2004-09-01
  • 打赏
  • 举报
回复
http://groups.google.ca/groups?hl=en&lr=&ie=UTF-8&q=GetActiveObject+ROT&btnG=Search&meta=group%3Dmicrosoft.public.vc.atl

帮你UP

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧