изменить статус служб Windows в C / C ++ - PullRequest
3 голосов
/ 11 декабря 2011

Как я могу изменить текущее состояние службы Windows из программы C / C ++ ??

например, скажем, Mysql работает как служба, и его текущий статус «Запущен» ... как я могу проверить статус и как я могу изменить его статус из программы ac / c ++?например, если я хочу изменить его статус с «Запущено» на «Остановлено» - как я могу сделать это в c / c ++?

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011

QueryServiceStatus может использоваться для определения статуса услуги.

Посмотрите на другие Сервисные функции , чтобы изменить статус.Существует даже полный пример Запуск службы (и соответствующий Код остановки службы ).

2 голосов
/ 11 декабря 2011

Небольшой фрагмент кода, который вы должны начать:

/* 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...