C/C++プログラムからWindowsサービスの現在の状態を変更する方法はありますか?c/C++でWindowsサービスのステータスを変更
たとえば、Mysqlはサービスとして実行されており、現在のステータスは「開始済み」です...どのようにステータスを確認できますか、どのようにステータスをc/C++プログラムから変更できますか?私のステータスを 'Started'から 'Stopped'に変更したい場合はどうすればいいですか?c/C++でどうすればいいですか?
C/C++プログラムからWindowsサービスの現在の状態を変更する方法はありますか?c/C++でWindowsサービスのステータスを変更
たとえば、Mysqlはサービスとして実行されており、現在のステータスは「開始済み」です...どのようにステータスを確認できますか、どのようにステータスをc/C++プログラムから変更できますか?私のステータスを 'Started'から 'Stopped'に変更したい場合はどうすればいいですか?c/C++でどうすればいいですか?
QueryServiceStatus
は、サービスのステータスを判断するために使用できます。
Service functionsを参照してステータスを変更してください。完全なStarting a Serviceの例もあります(一致するコードはStopping a Serviceです)。
あなたが始める必要がある小さなコードスニペット:
/* Open service control manager. */
SC_HANDLE scm_handle = OpenSCManager(0,
0,
SC_MANAGER_ALL_ACCESS);
/* Ensure (0 != scm_handle) */
/* Open service. */
SC_HANDLE service_handle = OpenService(scm_handle,
"mysql-service-name",
SERVICE_ALL_ACCESS);
/* Ensure (0 != service_handle) */
/* Try to stop the service if it is running. */
SERVICE_STATUS status; /* This may need populated differently for mysql. */
status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
if (ControlService(service_handle, SERVICE_CONTROL_STOP, &status))
{
Sleep(1000);
while (QueryServiceStatus(service_handle, &status))
{
if(status.dwCurrentState == SERVICE_STOP_PENDING)
{
Sleep(1000);
}
else
{
break;
}
}
if (status.dwCurrentState == SERVICE_STOPPED)
{
/* Success: service stopped. */
}
else
{
/* Failure: service not stopped. */
}
}
else
{
/* Failed to issue stop request. */
}
CloseServiceHandle(service_handle);
CloseServiceHandle(scm_handle);
をそれはC++よりも多くのWinAPIの質問です... –