WEB开发网
开发学院软件开发VC 用 C 语言编写 Windows 服务程序的五个步骤 阅读

用 C 语言编写 Windows 服务程序的五个步骤

 2006-07-20 11:40:51 来源:WEB开发网   
核心提示: 在报告了服务状态之后,你可以调用 InitService 函数来完成初始化,用 C 语言编写 Windows 服务程序的五个步骤(5),这个函数只是添加一个说明性字符串到日志文件,如下面代码所示:// 服务初始化int InitService(){int result;result = W

在报告了服务状态之后,你可以调用 InitService 函数来完成初始化。这个函数只是添加一个说明性字符串到日志文件。如下面代码所示:

// 服务初始化
int InitService()
{
  int result;
  result = WriteToLog("Monitoring started.");
  return(result);
}

在 ServiceMain 中,检查 InitService 函数的返回值。如果初始化有错(因为有可能写日志文件失败),则将服务状态置为终止并退出 ServiceMain:

error = InitService();
if (error)
{
  // 初始化失败,终止服务
  ServiceStatus.dwCurrentState = SERVICE_STOPPED;
  ServiceStatus.dwWin32ExitCode = -1;
  SetServiceStatus(hStatus, &ServiceStatus);
  // 退出 ServiceMain
  return;
}

如果初始化成功,则向 SCM 报告状态:

// 向 SCM 报告运行状态
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);

接着,启动工作循环。每五秒钟查询一个可用物理内存并将结果写入日志文件。

如 Listing 1 所示,循环一直到服务的状态为 SERVICE_RUNNING 或日志文件写入出错为止。状态可能在 ControlHandler 函数响应 SCM 控制请求时修改。

第三步:处理控制请求

在第二步中,你用 ServiceMain 函数注册了控制处理器函数。控制处理器与处理各种 Windows 消息的窗口回调函数非常类似。它检查 SCM 发送了什么请求并采取相应行动。

每次你调用 SetServiceStatus 函数的时候,必须指定服务接收 STOP 和 SHUTDOWN 请求。Listing 2 示范了如何在 ControlHandler 函数中处理它们。

上一页  1 2 3 4 5 6 7  下一页

Tags:语言 编写 Windows

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