开发系统服务时,不能与桌面交互,后来加入了与桌面交互的部分,可以在桌面看见窗口。
但是在使用iwebbrowser时出错,具体代码如下:
int SysCallMainFunc(  ) 

DWORD dwThreadId; 
HWINSTA hwinstaSave; 
HDESK hdeskSave; 
HWINSTA hwinstaUser; 
HDESK hdeskUser; 
int result;  // Ensure connection to service window station and desktop, and 
// save their handles.  GetDesktopWindow(); 
hwinstaSave = GetProcessWindowStation(); 
dwThreadId = GetCurrentThreadId(); 
hdeskSave = GetThreadDesktop(dwThreadId);  hwinstaUser = OpenWindowStation(TEXT("WinSta0"), FALSE, MAXIMUM_ALLOWED); 
SetProcessWindowStation(hwinstaUser); 
hdeskUser = OpenDesktop(TEXT("Default"), 0, FALSE, MAXIMUM_ALLOWED); 
RpcRevertToSelf(); 
if (hdeskUser == NULL) 

SetProcessWindowStation(hwinstaSave); 
CloseWindowStation(hwinstaUser); 
return 0; 

SetThreadDesktop(hdeskUser);  // Display message box.  dwGuiThreadIde = dwThreadId; 
result = MessageBox(NULL, TEXT("Default"), TEXT("Default"), 0); //这一步可以实现 dwGuiThreadIde = 0; 
BOOL b_OK = FALSE;
IWebBrowser2 *pBrowser=NULL;
HRESULT hr1 ;
hr1 = CoInitialize(NULL);                                       //这一步也正确
if( !SUCCEEDED( hr1 ) )
{
                return FALSE;
} hr1 = CoCreateInstance(CLSID_InternetExplorer,                 //到这里出错啦,hr1 报 ACCESSDENY           
NULL,
CLSCTX_SERVER,
IID_IWebBrowser2,
(LPVOID *)&pBrowser);
if( !SUCCEEDED( hr1 ) )
{
return FALSE;
} BSTR bstrURL = ::SysAllocString(TEXT("http://www.baidu.com"));
VARIANT vaURL, vNull;
vaURL.vt = VT_BSTR;
vaURL.bstrVal = bstrURL;
vNull.vt = VT_NULL;
pBrowser->Navigate2(&vaURL,&vNull,&vNull,&vNull,&vNull); // Restore window station and desktop.  SetThreadDesktop(hdeskSave); 
SetProcessWindowStation(hwinstaSave); 
CloseDesktop(hdeskUser); 
CloseWindowStation(hwinstaUser);  return result; 
}
请教各位高手,这个到底是什么原因,为什么iwebbrowser不能创建????

解决方案 »

  1.   

    IWebBrowser使用了wininet系列API来访问web,这些API只能在用户权限里面执行,服务进程没有权限使用。服务进程应该使用WinHTTP系列API来访问web。
    要么你把服务使用用户帐户来运行,要么换成WinHTTP来访问。
      

  2.   

    To:jameshooo
      那就是说我需要用户名和密码才可以实现喽?具体怎么实现请指导一下下子,不使用winHTTP。
      

  3.   

    我的解决方法是,服务里面释放dll注入到应用层exe.
      

  4.   

    To:wwwllg
    注入大部分杀软都认为是病毒啦,会让客户感觉不安全。