首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++ 編寫 Win32 服務程序實戰(二):CNTService 封裝類深度應用

     編輯:VC 教學

CNTService 類架構

CNTService 封裝了 Windows 服務 API,提供比裸 API 更高層的抽象:

  • 命令行解析(安裝 -i、卸載 -u、版本 -v、調試 -d)。
  • 事件日誌記錄封裝。
  • 虛擬函數供派生類實現業務邏輯:OnInit、Run、OnUserControl。

示例服務:CMyService


main 函數極簡實現


服務安裝與卸載

  • CNTService::Install:調用 CreateService 向 SCM 註冊,在 HKLM\SYSTEM\CurrentControlSet\Services\ 創建鍵,並註冊事件日誌來源。
  • CNTService::Uninstall:調用 DeleteService 移除 SCM 註冊,不刪除可執行文件。

核心業務邏輯實現

1. 初始化 (OnInit)


2. 工作循環 (Run)

BOOL CMyService::OnUserControl(DWORD dwOpcode)
{
    switch (dwOpcode)
    {
        case 128: // 自定義:重置狀態
            m_iState = m_iStartParam;
            SaveStatus();
            return TRUE;
        case 129: // 自定義:導出當前狀態
            // 可寫文件或發送事件
            return TRUE;
    }
    return FALSE; // 未處理
}

客戶端調用 ControlService(hService, 128, &ss) 發送自定義碼。

狀態持久化 (SaveStatus)


調試技巧

  • 在 main 中取消註釋 DebugBreak(),服務啟動時自動進入調試器。
  • 或使用 StartServiceCtrlDispatcher 直接以控制台模式運行(需修改 CNTService 支持)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved