Win32 Windowsサービスを制御する ControlService
Windowsサービスの状態を制御するには、ControlService関数を用いる。
ControlService関数のプロトタイプは以下のとおり。
BOOL ControlService( SC_HANDLE hService, // サービスのハンドル DWORD dwControl, // 制御コード LPSERVICE_STATUS lpServiceStatus // ステータス情報 );
#include <windows.h> #include <stdio.h> int main() { SC_HANDLE hSCM = NULL; SC_HANDLE hService = NULL; SERVICE_STATUS ServiceStatus; LPCTSTR lpszServiceName = TEXT("iPod Service"); hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); if (hSCM == NULL) { printf("OpenSCManager error: %d\n", GetLastError()); goto EXIT_FUNC; } //ControlService関数でサービスを停止するためには、OpenService関数で、 //SERVICE_STOPアクセス権を持つサービスハンドルを取得する必要がある。 hService = OpenService(hSCM, lpszServiceName, SERVICE_STOP); if (hService == NULL) { printf("OpenService error: %d\n", GetLastError()); goto EXIT_FUNC; } //サービスを停止するためには、第2引数に SERVICE_CONTROL_STOP を指定する。 if (ControlService(hService, SERVICE_CONTROL_STOP, &ServiceStatus)) { printf("Success\n"); } else { printf("OpenService error: %d\n", GetLastError()); } EXIT_FUNC: CloseServiceHandle(hSCM); CloseServiceHandle(hService); return 0; }
注意:このプログラムを実行するためには、管理者権限が必要になる。実行ファイルを右クリックし、ポップアップで「管理者として実行(A)...」を選択して実行する。管理者のパスワードを求められることもある。
http://msdn.microsoft.com/ja-jp/library/cc429053.aspx