WEB开发网
开发学院软件开发VC 用 ATL 编写 Windows 服务 阅读

用 ATL 编写 Windows 服务

 2006-07-22 22:53:28 来源:WEB开发网   
核心提示: 每次编码后测试都要在命令行中加参数运行服务才可以在SCM中列出来是不是很麻烦呢?我再介绍一个偷懒的方法,选择VC IDE的菜单Project -> Setting, 再选择Custom Build面板,用 ATL 编写 Windows 服务(2),如图三:图三在"$(Tar

每次编码后测试都要在命令行中加参数运行服务才可以在SCM中列出来是不是很麻烦呢?我再介绍一个偷懒的方法,选择VC IDE的菜单Project -> Setting, 再选择Custom Build 面板,如图三:

图三

在"$(TargetPath)" /RegServer的下面加上:"$(TargetPath)" /Service,这样当我们每次编码后编译程序,就不用再在命令行中去加参数执行我们的服务程序完成服务的注册了。

继续介绍向导生成的代码:向导为我们建立了一个类:CServiceModule,全局变量_Module就是这个类的实例。

Init():这个函数用于完成一些初始化工作;

Run():这个函数就是服务开始运行后的内容,我们接下来要修改的内容也就是从这里入手。

Install():

看一下Install()的这一部分:

SC_HANDLE hService = ::CreateService(hSCM,
         m_szServiceName,
         m_szServiceName,SERVICE_ALL_ACCESS,
         SERVICE_WIN32_OWN_PROCESS,
         SERVICE_DEMAND_START,
         SERVICE_ERROR_NORMAL,
         szFilePath,
         NULL,
         NULL,
         _T("RPCSS\0"),
         NULL,
         NULL);   

函数的原型如下:

SC_HANDLE CreateService(
  SC_HANDLE hSCManager,    // handle to SCM database
  LPCTSTR lpServiceName,   // name of service to start
  LPCTSTR lpDisplayName,   // display name
  DWORD dwDesiredAccess,   // type of access to service
  DWORD dwServiceType,    // type of service
  DWORD dwStartType,     // when to start service
  DWORD dwErrorControl,    // severity of service failure
  LPCTSTR lpBinaryPathName,  // name of binary file
  LPCTSTR lpLoadOrderGroup,  // name of load ordering group
  LPDWORD lpdwTagId,     // tag identifier
  LPCTSTR lpDependencies,   // array of dependency names
  LPCTSTR lpServiceStartName, // account name
  LPCTSTR lpPassword     // account password
);

具体的细节可以查一下MSDN,我只说一下第六个和第十一个参数。第六个参数是服务的启动类型。

Tags:ATL 编写 Windows

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接