我没有做过COM方面的东东,但Service做过,我猜你是权限问题....
Application是以Administrator或其它的用户身份运行的,而Service是以System身份运行。
你可以试一下将Service的身份切换到当前用户...再试那个COM,也许就OK了...
贴一段代码...这是我的Service中使用的....其目的是在用户登录后...能在Tray显示Service的图标
这是其中的部份:
procedure TfLog.wndproc(var message: Tmessage);
var
processHandle, userToken : THandle;
begin
inherited;
if Message.Msg=WM_iMessagerShowTrayIcon then begin
//== ÊÇÍⲿ³ÌÐòÒªÇóÏÔʾTrayIcon
RevertToSelf; // »Ö¸´µ½×Ô¼ºµÄÉí·Ý
processHandle := OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, Message.LParam);
if processHandle=0 then
exit; //ÎÞ·¨´ò¿ª½ø³Ì
if (not OpenProcessToken(processHandle, TOKEN_QUERY or TOKEN_DUPLICATE or TOKEN_IMPERSONATE, userToken)) then begin
CloseHandle(processHandle);
exit; // ´ò¿ª½ø³ÌTokenʧ°Ü
end;
CloseHandle(processHandle);
if (not ImpersonateLoggedOnUser(userToken)) then begin
CloseHandle(userToken);
exit; // Ä£·ÂÓû§Ê§°Ü
end;
CloseHandle(userToken);
......
在使用时,你的Application发个Message给Service,让Service知道现在有用户登录了...然后
Service就执行这段代码,将自己的身份切换到当前用户....