完全なサービス サンプル
このセクションのトピックは、完全なサービス サンプルを形成します。
- Sample.mc (エラー メッセージが含まれています)
- Svc.cpp (サービス コードを含む)
- SvcConfig.cpp (サービス構成コードを含む)
- SvcControl.cpp (サービス制御コードを含む)
サービスの構築
次の手順では、サービスをビルドし、イベント メッセージ DLL を登録する方法について説明します。
サービスをビルドし、イベント メッセージ DLL を登録するには
次の手順を使用して、Sample.mc からメッセージ DLL をビルドします。
- mc -U sample.mc
- rc -r sample.rc
- link -dll -noentry -out:sample.dll sample.res
それぞれ、Svc.cpp、SvcConfig.cpp、および SvcControl.cpp からSvc.exe、SvcConfig.exe、およびSvcControl.exeをビルドします。
レジストリ キー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName を作成し、このキーに次のレジストリ値を追加します。
値 型 説明 EventMessageFile = dll_path REG_SZ サービスがイベント ログに書き込むことができる文字列を含むリソース専用 DLL へのパス。 TypesSupported = 0x00000007 REG_DWORD サポートされているイベントの種類を指定するビット マスク。 0x000000007値は、すべての型がサポートされていることを示します。
サービスのテスト
次の手順では、サービスをテストする方法について説明します。
サービスをテストするには
コントロール パネルで、サービス アプリケーションを起動します。 (次の手順では、 サービス アプリケーションの情報を変更するコマンドを実行した後、F5 キーを使用して表示を更新します)。
次のコマンドを実行して、サービスをインストールします。
svc のインストール
操作が成功した場合は"Service installed successfully" がコンソールに書き込まれるか、それ以外の場合はエラー メッセージがサービスによってコンソールに書き込まれます。
サービスのインストールが成功すると、サービスが サービス アプリケーションに表示されます。 Name が "SvcName" に設定され、Description と Status が空白で、スタートアップの種類が "Manual" に設定されていることに注意してください。
次のコマンドを実行して、サービスを開始します。
svccontrol start SvcName
操作が成功すると、サービス制御プログラムは "サービス開始保留中..." と書き込みます。次に、コンソールに "サービスが正常に開始されました" という手順を実行します。 それ以外の場合、プログラムはコンソールにエラー メッセージを書き込みます。
サービスが正常に開始された場合、 Status は "Started" に設定されます。 ServiceMain 関数のコードは、SCM によって実行されます。 エラーが発生した場合、サービスはイベント ログにエラー メッセージを書き込みます。 このメッセージには、失敗した関数の名前と、失敗した場合に返されたエラー コードが含まれます。
次のコマンドを実行して、サービスの説明を更新します。
svcconfig で SvcName について説明する
操作が成功した場合は、サービス構成プログラムによって "サービスの説明が正常に更新されました" がコンソールに書き込まれるか、それ以外の場合はエラー メッセージが書き込まれます。
更新が成功した場合、 Description は "This is a test description" に設定されます。
次のコマンドを実行して、サービス構成に対してクエリを実行します。
svcconfig クエリ SvcName
サービス構成プログラムは、操作が成功した場合はサービス構成情報をコンソールに書き込み、それ以外の場合はエラー メッセージを書き込みます。
次のコマンドを実行して、サービス DACL を変更します。
svccontrol dacl SvcName
操作が成功した場合は、サービス構成プログラムによって "Service DACL が正常に更新されました" がコンソールに書き込まれるか、それ以外の場合はエラー メッセージが書き込まれます。
次のコマンドを実行して、サービスを無効にします。
svcconfig で SvcName を無効にする
操作が成功した場合は、サービス構成プログラムによって "サービスが正常に無効にされました" がコンソールに書き込まれます。それ以外の場合は、エラー メッセージが表示されます。
サービスが正常に無効になっている場合、 スタートアップの種類 は "無効" に設定されます。
次のコマンドを実行して、サービスを有効にします。
svcconfig enable SvcName
操作が成功した場合は、サービス構成プログラムによってコンソールに "サービスが有効になりました" が書き込まれます。それ以外の場合はエラー メッセージが書き込まれます。
サービスが正常に有効になっている場合、 スタートアップの種類 は "手動" に設定されます。
次のコマンドを実行して、サービスを停止します。
svccontrol stop SvcName
操作が成功すると、サービス制御プログラムは "サービス停止保留中..." と書き込みます。次に、コンソールに "サービスが正常に停止しました" という手順を実行します。 それ以外の場合、プログラムはコンソールにエラー メッセージを書き込みます。
サービスが正常に停止した場合、 状態 は空白です。
サービスの停止に失敗した場合、サービス制御プログラムは、失敗した関数の名前とエラー時に返されたエラー コードを含むエラー メッセージをイベント ログに書き込みます。
次のコマンドを実行して、サービスを削除します。
svcconfig delete SvcName
操作が成功した場合は、サービス構成プログラムによって "サービスが正常に削除されました" がコンソールに書き込まれます。それ以外の場合は、エラー メッセージが表示されます。
サービスが正常に削除されると、 サービス アプリケーションに表示されなくなります。 (停止していないサービスを削除しようとすると、操作は成功しますが、 スタートアップの種類 は "無効" に設定され、システムの再起動時またはタスク マネージャーを使用してサービスが終了すると、サービス エントリが削除されることに注意してください)。
関連トピック