【问题标题】:change status of windows services in c/c++在 C/C++ 中更改 Windows 服务的状态
【发布时间】:2011-12-11 09:17:20
【问题描述】:

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

例如,Mysql 作为服务运行,其当前状态为“已启动”...如何检查状态以及如何从 c/c++ 程序更改其状态?就像我想将其状态从“已启动”更改为“已停止” - 我如何在 c/c++ 中做到这一点?

【问题讨论】:

  • 这更像是一个 WinAPI 问题而不是 C++ 问题...

标签: c++ c winapi service


【解决方案1】:

QueryServiceStatus 可用于确定服务的状态。

查看其他Service functions 更改状态。甚至还有一个完整的 Starting a Service 示例(以及匹配的 Stopping a Service 代码)。

【讨论】:

    【解决方案2】:

    一个可以帮助您入门的小代码 sn-p:

    /* 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多