サービスの完全なサンプル

このセクションのトピックでは、完全なサービス サンプルを作成します。

  • Sample.mc (エラー メッセージが含まれています)
  • Svc.cpp (サービス コードが含まれています)
  • SvcConfig.cpp (サービス構成コードが含まれています)
  • SvcControl.cpp (サービス制御コードが含まれています)

サービスの構築

次の手順では、サービスをビルドし、イベント メッセージ DLL を登録する方法について説明します。

サービスをビルドし、イベント メッセージ DLL を登録するには

  1. 次の手順を使用して、Sample.mc からメッセージ DLL をビルドします。

    1. mc -U sample.mc
    2. rc -r sample.rc
    3. link -dll -noentry -out:sample.dll sample.res
  2. それぞれ、Svc.cpp、SvcConfig.cpp、および SvcControl.cpp からSvc.exe、SvcConfig.exe、およびSvcControl.exeをビルドします。

  3. レジストリ キー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName を作成し、次のレジストリ値をこのキーに追加します。

    説明
    EventMessageFile = dll_path REG_SZ サービスがイベント ログに書き込むことができる文字列を含むリソース専用 DLL へのパス。
    TypesSupported = 0x00000007 REG_DWORD サポートされているイベントの種類を指定するビット マスク。 0x000000007値は、すべての型がサポートされていることを示します。

     

サービスのテスト

次の手順では、サービスをテストする方法について説明します。

サービスをテストするには

  1. コントロール パネルで、サービス アプリケーションを起動します。 (次の手順では、 F5 キーを使用して、サービス アプリケーションの情報を変更するコマンドを実行した後、表示を更新します)。

  2. 次のコマンドを実行して、サービスをインストールします。

    svc のインストール

    操作が成功した場合はコンソールに"サービスが正常にインストールされました"、それ以外の場合はエラー メッセージがコンソールに書き込まれます。

    サービスのインストールが成功すると、サービス アプリケーションに サービス が表示されます。 Name が "SvcName" に設定され、説明状態が空白になり、スタートアップの種類が "Manual" に設定されていることに注意してください。

  3. 次のコマンドを実行してサービスを開始します。

    svccontrol start SvcName

    操作が成功すると、サービス制御プログラムは "サービス開始保留中..." と書き込みます。コンソールに"サービスが正常に開始されました"。 それ以外の場合、プログラムはコンソールにエラー メッセージを書き込みます。

    サービスが正常に開始された場合、 状態 は "開始済み" に設定されます。 ServiceMain 関数のコードは、SCM によって実行されます。 エラーが発生した場合、サービスはイベント ログにエラー メッセージを書き込みます。 このメッセージには、失敗した関数の名前と、エラー時に返されたエラー コードが含まれます。

  4. 次のコマンドを実行して、サービスの説明を更新します。

    svcconfig describe SvcName

    サービス構成プログラムは、操作が成功した場合はコンソールに"サービスの説明が正常に更新されました"、それ以外の場合はエラー メッセージを書き込みます。

    更新が成功した場合、 説明 は "This is a test description" に設定されます。

  5. 次のコマンドを実行して、サービス構成を照会します。

    svcconfig クエリ SvcName

    サービス構成プログラムは、操作が成功した場合はコンソールにサービス構成情報を書き込み、それ以外の場合はエラー メッセージを書き込みます。

  6. 次のコマンドを実行して、サービス DACL を変更します。

    svccontrol dacl SvcName

    サービス構成プログラムは、操作が成功した場合はコンソールに"Service DACL が正常に更新されました"、それ以外の場合はエラー メッセージを書き込みます。

  7. 次のコマンドを実行して、サービスを無効にします。

    svcconfig disable SvcName

    サービス構成プログラムは、操作が成功した場合はコンソールに"サービスが無効になりました"、それ以外の場合はエラー メッセージを書き込みます。

    サービスが正常に無効になっている場合、 スタートアップの種類 は "無効" に設定されます。

  8. 次のコマンドを実行して、サービスを有効にします。

    svcconfig enable SvcName

    サービス構成プログラムは、操作が成功した場合はコンソールに"サービスが有効になりました"、それ以外の場合はエラー メッセージを書き込みます。

    サービスが正常に有効になっている場合、 スタートアップの種類 は "手動" に設定されます。

  9. 次のコマンドを実行してサービスを停止します。

    svccontrol stop SvcName

    操作が成功すると、サービス制御プログラムは "サービス停止保留中..." と書き込みます。コンソールに"サービスが正常に停止しました"。 それ以外の場合、プログラムはコンソールにエラー メッセージを書き込みます。

    サービスが正常に停止した場合、 状態 は空白です。

    サービスの停止に失敗した場合、サービス制御プログラムは、失敗した関数の名前とエラー時に返されたエラー コードを含むエラー メッセージをイベント ログに書き込みます。

  10. 次のコマンドを実行してサービスを削除します。

    svcconfig delete SvcName

    サービス構成プログラムは、操作が成功した場合はコンソールに"サービスが正常に削除されました"、それ以外の場合はエラー メッセージを書き込みます。

    サービスが正常に削除されると、 サービス アプリケーションに表示されなくなります。 (停止していないサービスを削除しようとすると、操作は成功しますが、 スタートアップの種類 は "無効" に設定され、システムの再起動時またはタスク マネージャーを使用してサービスが終了すると、サービス エントリが削除されることに注意してください)。

サービスの使用