warntservicesvc.cpp

来自「ftpserver very good sample」· C++ 代码 · 共 133 行

CPP
133
字号
#include "StdAfx.h"#include "WarNtServiceSvc.h"   // class implemented/////////////////////////////// PUBLIC /////////////////////////////////////////============================= LIFECYCLE ====================================WarNtServiceSvc::WarNtServiceSvc(): mhSvc(NULL){}// WarNtServiceSvcWarNtServiceSvc::~WarNtServiceSvc(){    if (mhSvc)        CloseServiceHandle(mhSvc);}// ~WarNtServiceSvc//============================= OPERATORS ====================================//============================= OPERATIONS ===================================void WarNtServiceSvc::Create(war_ccsysstr_t machineName,                             DWORD dwMgrAccessType,                             war_ccsysstr_t serviceName,                             DWORD dwSvcAccessType,                             bool doLock)                             throw(WarException){    WarNtServiceMgr::Create(machineName, dwMgrAccessType, doLock);    if ((mhSvc = OpenService(mhMgr, serviceName, dwSvcAccessType))        == NULL)    {        WarThrow(WarSystemError(), NULL);    }}void WarNtServiceSvc::StartService() throw (WarException){    SERVICE_STATUS ss;    memset(&ss, 0, sizeof(ss));        if (!::QueryServiceStatus(mhSvc, &ss))        WarThrow(WarSystemError(), "QueryServiceStatus()");        if ((ss.dwCurrentState == SERVICE_PAUSED)        || (ss.dwCurrentState == SERVICE_PAUSE_PENDING))    {        if (!::ControlService(mhSvc, SERVICE_CONTROL_CONTINUE, &ss))            WarThrow(WarSystemError(), "::ControlService()");                while (ss.dwCurrentState == SERVICE_CONTINUE_PENDING)        {            ::Sleep(500);            if (!::QueryServiceStatus(mhSvc, &ss))                WarThrow(WarSystemError(), "QueryServiceStatus()");        }        if (ss.dwCurrentState != SERVICE_RUNNING)            WarThrow(WarError(WAR_ERR_UNEXCPECTED_REPLY_CODE), NULL);                return;    }    if ((ss.dwCurrentState == SERVICE_START_PENDING)        || (ss.dwCurrentState == SERVICE_CONTINUE_PENDING))        return;        if (!::StartService(mhSvc, NULL, NULL))        WarThrow(WarSystemError(), "::StartService()");        do     {        ::Sleep(500);        if (!::QueryServiceStatus(mhSvc, &ss))            WarThrow(WarSystemError(), "QueryServiceStatus()");    } while(ss.dwCurrentState == SERVICE_START_PENDING);        if (ss.dwCurrentState != SERVICE_RUNNING)        WarThrow(WarError(WAR_ERR_UNEXCPECTED_REPLY_CODE), NULL);}void WarNtServiceSvc::PauseService() throw (WarException){    SERVICE_STATUS ss;    memset(&ss, 0, sizeof(ss));    if (!::ControlService(mhSvc, SERVICE_CONTROL_PAUSE, &ss))        WarThrow(WarSystemError(), "::ControlService()");    while (ss.dwCurrentState == SERVICE_PAUSE_PENDING)    {        ::Sleep(500);        if (!::QueryServiceStatus(mhSvc, &ss))            WarThrow(WarSystemError(), "QueryServiceStatus()");    }    if (ss.dwCurrentState != SERVICE_PAUSED)        WarThrow(WarError(WAR_ERR_UNEXCPECTED_REPLY_CODE), NULL);}void WarNtServiceSvc::StopService() throw (WarException){    SERVICE_STATUS ss;    memset(&ss, 0, sizeof(ss));    if (!::ControlService(mhSvc, SERVICE_CONTROL_STOP, &ss))        WarThrow(WarSystemError(), "::ControlService()");    while (ss.dwCurrentState == SERVICE_STOP_PENDING)    {        ::Sleep(500);        if (!::QueryServiceStatus(mhSvc, &ss))            WarThrow(WarSystemError(), "QueryServiceStatus()");    }    if (ss.dwCurrentState != SERVICE_STOPPED)        WarThrow(WarError(WAR_ERR_UNEXCPECTED_REPLY_CODE), NULL);}//============================= CALLBACK   ===================================//============================= ACCESS     ===================================//============================= INQUIRY    ===================================/////////////////////////////// PROTECTED  ////////////////////////////////////////////////////////////////// PRIVATE    ///////////////////////////////////

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?