次の方法で共有


CAtlServiceModuleT::Start 関数

更新 : 2007 年 11 月

サービスを実行すると、_tWinMainCAtlServiceModuleT::WinMain を呼び出します。次に CAtlServiceModuleT::Start を呼び出します。

CAtlServiceModuleT::Start は、各サービスをスタートアップ関数に対応付ける SERVICE_TABLE_ENTRY 構造体の配列を設定します。次に、この配列を Win32 API 関数 StartServiceCtrlDispatcher に渡します。理論上は、1 つの EXE で複数のサービスを処理できるため、配列に複数の SERVICE_TABLE_ENTRY 構造体を格納できます。ただし、現在 ATL によって生成されたサービスは、1 つの EXE につきサービスを 1 つしかサポートしていません。そのため、配列には、サービス名とスタートアップ関数 _ServiceMain を含むエントリが 1 つしかありません。_ServiceMain は、CAtlServiceModuleT の静的メンバ関数であり、非静的メンバ関数 ServiceMain を呼び出します。

xbzdex13.alert_note(ja-jp,VS.90).gifメモ :

StartServiceCtrlDispatcher でサービス コントロール マネージャ (SCM: Service Control Manager) に接続できない場合、プログラムはサービスとして動作しません。この場合、プログラムがローカル サーバーとして動作するため、CAtlServiceModuleT::Run を直接呼び出します。ローカル サーバーとしてのプログラムの実行に関する詳細については、「デバッグのヒント」を参照してください。

参照

参照

ATL サービス

CAtlServiceModuleT::Start