C++ 在c/c+中更改windows服务的状态+;

C++ 在c/c+中更改windows服务的状态+;,c++,c,winapi,service,C++,C,Winapi,Service,如何从C/C++程序更改windows服务的当前状态 例如,Mysql作为服务运行,其当前状态为“已启动”。。。如何检查状态以及如何从c/c++程序更改其状态?例如,如果我想将其状态从“已启动”更改为“已停止”-如何在c/c++中执行此操作?可用于确定服务的状态 查看另一个以更改状态。甚至还有一个完整的示例(以及匹配的代码)。一个小的代码片段,您应该开始: /* Open service control manager. */ SC_HANDLE scm_handle = OpenSCManag

如何从C/C++程序更改windows服务的当前状态

例如,Mysql作为服务运行,其当前状态为“已启动”。。。如何检查状态以及如何从c/c++程序更改其状态?例如,如果我想将其状态从“已启动”更改为“已停止”-如何在c/c++中执行此操作?

可用于确定服务的状态


查看另一个以更改状态。甚至还有一个完整的示例(以及匹配的代码)。

一个小的代码片段,您应该开始:

/* 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++更为WiAPI的问题…