关闭WINDOWS服务

bool CloseWindowsService(TCHAR* service) //服务名
{
    SC_HANDLE hSC = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    if (hSC == NULL)
    {

        printf("OpenSCManager fail(%ld)", GetLastError());
        return false;
    }

    // open service
    SC_HANDLE hSvc = ::OpenService(hSC, service,
        SERVICE_START | SERVICE_QUERY_STATUS | SERVICE_STOP);
    if (hSvc == NULL)
    {
        ::CloseServiceHandle(hSC);
        return false;
    }
    // get service status
    SERVICE_STATUS status;
    if (::QueryServiceStatus(hSvc, &status) == FALSE)
    {
        ::CloseServiceHandle(hSvc);
        ::CloseServiceHandle(hSC);
        return false;
    }

    //if status == running, stop the service
    if (status.dwCurrentState == SERVICE_RUNNING)
    {
        if (::ControlService(hSvc,
            SERVICE_CONTROL_STOP, &status) == FALSE)
        {
            ::CloseServiceHandle(hSvc);
            ::CloseServiceHandle(hSC);
            return false;
        }
        //wait the stop operation
        while (::QueryServiceStatus(hSvc, &status) == TRUE)
        {
            ::Sleep(status.dwWaitHint);
            if (status.dwCurrentState == SERVICE_STOPPED)
            {
                ::CloseServiceHandle(hSvc);
                ::CloseServiceHandle(hSC);
                return true;
            }
        }
    }

    ::CloseServiceHandle(hSvc);
    ::CloseServiceHandle(hSC);
    return true;
}


    TCHAR* t = TEXT("iphlpsvc");
    CloseWindowsService(t);


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部