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