このサービスプログラム、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ファイルが表示されますがあります
ストップサービス
削除サービス