完全なサービス サンプル

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

サービスの構築

次の手順では、サービスをビルドし、イベント メッセージ 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 のインストール

    操作が成功した場合は"Service installed successfully" がコンソールに書き込まれるか、それ以外の場合はエラー メッセージがサービスによってコンソールに書き込まれます。

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

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

    svccontrol start SvcName

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

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

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

    svcconfig で SvcName について説明する

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

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

  5. 次のコマンドを実行して、サービス構成に対してクエリを実行します。

    svcconfig クエリ SvcName

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

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

    svccontrol dacl SvcName

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

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

    svcconfig で SvcName を無効にする

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

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

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

    svcconfig enable SvcName

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

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

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

    svccontrol stop SvcName

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

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

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

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

    svcconfig delete SvcName

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

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

サービスの使用