シンプルなWindowsサービスプログラムを書きます

このサービスプログラム、Cで1秒間隔:現在の残りのメモリサイズのMB \ log.txtファイルを書き込みます

注:CMD管理者が開始するには、BINPATH =パス(絶対パス)は、ファイルが他に指定見つける完全なシステムを追加します

サービス名BINPATH = Eを作成SCサービスを作成します:\ smallinsect \ WINDOWSAPI \ binに\ x64の\リリース\ DemoService01.exe
サービスSC開始サービス名の開始
クエリサービスSCクエリサービス名は
、サービスSC削除サービス名を削除した
SCストップサービス名サービスのうち、
コンフィギュレーション・サービス:
SC構成サービス名は、開始=需要//手動で
皮下condigサービス名は、開始=自動//自動的
SC構成サービス名は無効//無効=開始します

  1  の#define _CRT_SECURE_NO_WARNINGS
   2  
  3の#include <stdio.hの>
   4の#include <WINDOWS.H>
   5  
  6  の#define SLEEP_TIME 1000年
   7  の#define FILE_PATH "C:/log.txt"
   8  
  9 VOID WINAPI ServiceMain(DWORD dwNumServicesArgs、LPTSTR * lpServiceArgVectors);
10  VOID WINAPI ServiceCtrlHandler(DWORD dwControl)。
11  INT WriteToLog(CONST  文字 * szMsg)。
12  
13 BOOL bRunningは= TRUE。
14上記Service_Status m_ServiceStatus。//サービスステータス
15 SERVICE_STATUS_HANDLE m_ServiceStatusHandle; // サービスのステータスハンドル
16  
17。 TCHAR szServiceName [] = TEXT(" DemoService "); // サービスの名前
18がある 
。19  INTメイン(int型 ARGC、CHAR * ARGV []){
 20は、 
21である     // サービス分配表
22は、      SERVICE_TABLE_ENTRY DispatchTable [ 2 ];
 23である     // サービス名
24      DispatchTable [ 0 ] = .lpServiceName szServiceName;
 25      // サービスマスター関数
26     DispatchTable [ 0 ] = .lpServiceProc (LPSERVICE_MAIN_FUNCTION)ServiceMain;
 27      
28      [DispatchTable 1 ] .lpServiceName = NULL;
 29      DispatchTableを[ 1 ] .lpServiceProc = NULL;
 30  
31である     // メイン関数登録サービス
 32      // へサービスコントロールディスペンサーサービススレッド作成
33はある     StartServiceCtrlDispatcher(DispatchTable);
 34である 
35      システム(" PAUSE " );
 36      リターン 0 ;
 37  }
 38である 
39  // 実装主な機能とサービス
40 VOID WINAPI ServiceMain(DWORD dwNumServicesArgs、LPTSTR * lpServiceArgVectors){
 41は 
42である      MEMORYSTATUSのmemstatus; // メモリ情報
43は、     チャー szMsg [ 512 ];
 44は、     SIZE_Tのavailmb;
 45  
46である     // サービスのタイプWIN32 
47      m_ServiceStatus.dwServiceType = SERVICE_WIN32;
 48      // サービス待ち状態
49      m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
 50      // サービスコントロールサービスが停止したオフ
51は、      m_ServiceStatus.dwControlsAccepted SERVICE_ACCEPT_SHUTDOWN = |SERVICE_ACCEPT_STOP;
 52である     // サービス出口
53は      m_ServiceStatus.dwWin32ExitCode = 0 ;
 54である     // サービス出口
55      m_ServiceStatus.dwServiceSpecificExitCode = 0 ;
 56である      m_ServiceStatus.dwCheckPoint = 0 ;
 57である      m_ServiceStatus.dwWaitHint = 0 ;
 58      // 登録サービス制御機能
59      m_ServiceStatusHandle = RegisterServiceCtrlHandler(szServiceName、ServiceCtrlHandler)
 60      IF(m_ServiceStatusHandle == 0 ){
 61は          WriteToLog(" RegisterServiceCtrlHandler失敗" );
 62      }
 63      WriteToLog(" RegisterServiceCtrlHandler成功" );
 64  
65      // サービスが実行されている
66      m_ServiceStatus.dwCurrentState = SERVICE_RUNNINGを;
 67      // ステータスレポートサービス
68の      SetServiceStatus(m_ServiceStatusHandle、&m_ServiceStatus);
 69  
70      = Brunning TRUE;
 71である 
72      ながら(Brunning){
 73である         // コンピュータの現在のメモリサイズ検出
74          GlobalMemoryStatusを(&memstatus);
75          // 将内存换算成MB 
76          availmb = memstatus.dwAvailPhys / 1024個の / 1024個の77  _WIN64の#ifdef
 78          のsprintf(szMsg、" 利用可能なメモリは%LLDのMBである" 、availmb)。
79  の#else 
80          のsprintf(szMsg、" 使用可能メモリが%のLDのMBである" 、availmb)。
81  #endifの
82          WriteToLog(szMsg)。
83          スリープ(SLEEP_TIME)。
84      }
 85      WriteToLog(サービス停止" );
 86  }
 87  
88  // サービス制御機能
89  VOID WINAPI ServiceCtrlHandler(DWORD dwControl){
 90      スイッチ(dwControl){
 91は     ケース SERVICE_CONTROL_STOP:// ストップ
92          Brunning = FALSE;
 93          m_ServiceStatus.dwCurrentState = SERVICE_STOPPED; // 停止状態
94          BREAK ;
 95      ケース SERVICE_CONTROL_SHUTDOWN:// オフ
96          Brunning = FALSE;
 97         = SERVICE_STOPPED m_ServiceStatus.dwCurrentState; // ストップ状態
98          BREAK ;
 99      デフォルト100          BREAK ;
 101      }
 102      // レポートサービス状態
103      SetServiceStatus(m_ServiceStatusHandle、&m_ServiceStatus);
 104  }
 105  
106  // 書き込みログ機能
107  INT WriteToLog(CONST  CHAR * szMsg){
 108      FILE * = PFILEのfopen(FILE_PATH、" A + " );
 109      IF(== PFILENULL){
 110          リターン - 1 111      }
 112  
113      関数fprintf(PFILE、" %sの\ n " 、szMsg)。
114      FCLOSE(PFILE)。
115      リターン 0 ;
116 }
コードの表示

インストールサービス

 

 インストールが成功すると、サービスは、サービスのインストールを確認することができました。

 

 サービス開始

 

 Cドライブのディレクトリのlog.txtファイルが表示されますがあります

 

ストップサービス

 

 削除サービス

 

おすすめ

転載: www.cnblogs.com/xuqiulin/p/11986811.html