WEB开发网
开发学院软件开发VC 用 C++ 创建简单的 Win32 服务程序 阅读

用 C++ 创建简单的 Win32 服务程序

 2006-07-20 11:41:12 来源:WEB开发网   
核心提示: // NTServApp.rc#include <windows.h>// 包含由消息编译器(MC)产生的消息表资源脚本#include "NTServMsg.rc"Here''s the .RC file the message compi
// NTServApp.rc
#include <windows.h>
// 包含由消息编译器(MC)产生的消息表资源脚本
#include "NTServMsg.rc"
Here''s the .RC file the message compiler generated:
LANGUAGE 0x9,0x1
1 11 MSG00001.bin

正像你所看到的,这些文件中内容不多!

消息编译器产生的最后一个文件是你要包含到代码中的头文件,下面就是这个头文件的部分内容:

[..........]
//
// MessageId: EVMSG_INSTALLED
//
// MessageText:
//
// The %1 service was installed.
//
#define EVMSG_INSTALLED 0x00000064L
//
// MessageId: EVMSG_REMOVED
//
// MessageText:
//
// The %1 service was removed.
//
#define EVMSG_REMOVED 0x00000065L
[...........]

你可能已经注意到了有几个消息包含参数替代项(如 %1)。让我们看看将消息写入某个系统日志文件时如何在代码中使用消息ID和参数替代项。以事件日志中记录成功安装信息的部分安装代码为例。也就是 CNTService::IsInstalled 函数部分:

[....]
LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_INSTALLED, m_szServiceName);
[....]

LogEvent 是另一个 CNTService 函数,它使用事件类型(信息,警告或错误),事件消息的 ID,以及形成日志消息的最多三个参数的替代串:

// This function makes an entry into the application event log.
void CNTService::LogEvent(WORD wType, DWORD dwID,
      const char* pszS1,
      const char* pszS2,
      const char* pszS3)
{
  const char* ps[3];
  ps[0] = pszS1;
  ps[1] = pszS2;
  ps[2] = pszS3;
  
  int iStr = 0;
  for (int i = 0; i < 3; i++) {
    if (ps[i] != NULL) iStr++;
  }
  
  // Check to see if the event source has been registered,
  // and if not then register it now.
  if (!m_hEventSource) {
    m_hEventSource = ::RegisterEventSource(NULL, // local machine
      m_szServiceName); // source name
  }
  
  if (m_hEventSource) {
    ::ReportEvent(m_hEventSource,
      wType,
      0,
      dwID,
      NULL, // sid
      iStr,
      0,
      ps,
      NULL);
  }
}    

如你所见,其主要工作是由 ReportEvent 系统函数处理。

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

Tags:创建 简单 Win

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