您的位置:首页 > 其它

vs2008 创建ATL服务程序bug解决方法

2014-01-20 18:13 351 查看

今天使用vs2008 创建ATL服务程序遇到以下错误:

"事件 ID ( 0 )的描述(在资源( whappsvc )中)无法找到。 本地计算机可能没有必要的注册信息或消息 DLL 文件"

使用的命令

1. AtlServer /Service

2.AtlServer /UnRegServer

通过使用LogEvent 函数定位出错的地方(服务调试起来真的麻烦!),最后定位错误,增加此函数可以在系统日志中,查看相应的日志。

在atlbase.h

在类class ATL_NO_VTABLE CAtlServiceModuleT

在HRESULT Run(int nShowCmd = SW_HIDE) throw()

{

LogEvent(_T("service Real enter run "));

HRESULT hr = S_OK;

T* pT = static_cast<T*>(this);

hr = pT->PreMessageLoop(nShowCmd);

LogEvent(_T("PreMessageLoop %d",hr));

if(hr==S_FALSE)

hr=S_OK;

if (hr == S_OK)

{

if (m_bService)

{

LogEvent(_T("Service started"));

SetServiceStatus(SERVICE_RUNNING);

}

pT->RunMessageLoop();

}

if (SUCCEEDED(hr))

{

hr = pT->PostMessageLoop();

}

return hr;

}函数中

增加 以下代码

if(hr==S_FALSE)

hr=S_OK;、

服务成功运行起来,网上查知,这是vs2008的一个bug,解决方法:

1. 在run函数中增加

if(hr==S_FALSE)

hr=S_OK;

2.

stdafx.h中加入

#define_ATL_NO_COM_SUPPORT

3.

//微软Bug,微软提供处理方法

//hr=CAtlServiceModuleT<CBWSrvModule,IDS_SERVICENAME>::PreMessageLoop(nShowCmd);

//workaround

//if(hr==S_OK&&!m_bDelayShutdown)

//hr=CoResumeClassObjects();

(完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐