次の方法で共有


CAtlServiceModuleT::ServiceMain 関数

[コントロール パネル] の [サービス] を開き、当該サービスを選択して [開始] をクリックすると、サービス コントロール マネージャー (SCM: Service Control Manager) が ServiceMain を呼び出します。

SCM が ServiceMain を呼び出すと、サービスは SCM にハンドラー関数を渡す必要があります。 この関数を使用して SCM はサービスのステータスを取得し、一時中断や停止などの特定の命令を与えます。 サービスが Win32 API 関数 RegisterServiceCtrlHandler_Handler を渡すと、SCM がこのハンドラー関数を受け取ります。 _Handler は、静的メンバー関数であり、非静的メンバー関数 Handler を呼び出します。

サービスは、スタートアップのとき、SCM に現在のステータスを通知する必要もあります。 ステータスを通知するためには、Win32 API 関数 SetServiceStatusSERVICE_START_PENDING を渡します。

次に、ServiceMain は Win32 API 関数 CoInitializeEx を呼び出す CAtlExeModuleT::InitializeCom を呼び出します。 既定では、InitializeCom はこの関数に COINIT_MULTITHREADED フラグを渡します。 このフラグは、プログラムがフリー スレッド サーバーになることを示します。

ここで、CAtlServiceModuleT::Run が呼び出され、サービスの主要な処理が実行されます。 Run の実行は、サービスが停止するまで継続されます。

参照

参照

ATL サービス

CAtlServiceModuleT::ServiceMain