发生这种问题其实是正常的,因为服务程序是系统帐号,服务程序的ROT和Administrator登录的ROT是两张列表,因不就不能得到Administrator用户的ROT,不过我在使用模拟Administrator帐号后,还是无法得到我需要的ROT,不知****中有没有高手知道解决办法.在线等待...
5 个解决方案
#1
http://groups.google.ca/groups?hl=en&lr=&ie=UTF-8&q=GetActiveObject+ROT&btnG=Search&meta=group%3Dmicrosoft.public.vc.atl
帮你UP
帮你UP
#2
对对对.和楼主一样...这个问题也是让我百思不得其解...帮楼主顶一下.....希望可以有高手可以解决这个问题
#3
希望版主能把这个问题置顶,谢谢~~~~
#4
我自己解决了,和大家分享一下吧.
注册活动对象时要加上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();
}
注册活动对象时要加上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();
}
#5
过会就结帖了,分只能给进来的朋友了.:)
#1
http://groups.google.ca/groups?hl=en&lr=&ie=UTF-8&q=GetActiveObject+ROT&btnG=Search&meta=group%3Dmicrosoft.public.vc.atl
帮你UP
帮你UP
#2
对对对.和楼主一样...这个问题也是让我百思不得其解...帮楼主顶一下.....希望可以有高手可以解决这个问题
#3
希望版主能把这个问题置顶,谢谢~~~~
#4
我自己解决了,和大家分享一下吧.
注册活动对象时要加上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();
}
注册活动对象时要加上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();
}
#5
过会就结帖了,分只能给进来的朋友了.:)