ATL轻松简单创建NT服务

步骤:

1.  打开VS,创建一个ATL项目,名为MService

2.  ATL向导“应用程序设计”选项,去掉属性化,选择“服务(EXE)”选项,点击完成。

这时,我们就得到了一个什么也不做的NT服务,这时我们应该重写CMServiceModule 从模板CAtlServiceModuleT继承下的几个函数,来打造我们自己的NT服务。

3.  重写CMServiceModule继承下来的2个函数:

class CMServiceModule : public CAtlServiceModuleT< CMServiceModule, IDS_SERVICENAME >

{

public :

     DECLARE_LIBID(LIBID_MServiceLib)

     DECLARE_REGISTRY_APPID_RESOURCEID(IDR_MSERVICE, "{FA2DF597-14BD-44E1-820E-E5CF394CA58E}")

     HRESULT InitializeSecurity() throw()

     {

         // TODO : 调用 CoInitializeSecurity 并为服务提供适当的

         // 安全设置

         // 建议 - PKT 级别的身份验证、

         // RPC_C_IMP_LEVEL_IDENTIFY 的模拟级别

         // 以及适当的非空安全说明符。

 

         return S_OK;

     }

 

     HRESULT PreMessageLoop(int nShowCmd) throw();

     HRESULT PostMessageLoop() throw();

};

HRESULT CMServiceModule::PreMessageLoop(int nShowCmd) throw()

{

     HRESULT hr = __super::PreMessageLoop(nShowCmd);

 

     if (SUCCEEDED(hr) && !m_bDelayShutdown)

         hr = CoResumeClassObjects();

 

     if (SUCCEEDED(hr))

     {

         // Add any custom code to initialize your service

 

     }

 

     return hr;

}

 

HRESULT  CMServiceModule::PostMessageLoop() throw()

{

     HRESULT hr = __super::PostMessageLoop();

 

     if (SUCCEEDED(hr))

     {

         // Add any custom code to uninitialize your service

 

     }

 

     return hr;

}

   

4.  这时你可以在PreMessageLoop注释的部分可以初始化你的数据,并执行你的代码,你也可以开一个线程做任何你想做的事情。而在PostMessageLoop注释的部分做一些清理和回收的工作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值