SC相关代码

这段代码展示了如何在Windows上安装、启动、检查状态、停止和卸载服务。包括使用OpenSCManager、CreateService、QueryServiceStatus、ControlService和DeleteService等API函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void InstallService(AnsiString ServiceName,
                    AnsiString ServiceDispName,
                    AnsiString ServiceFileName)
{
   HANDLE SvcMgr;
   HANDLE Svc;
   SvcMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
   if(!SvcMgr)
      RaiseLastOSError();
   try
   {
       Svc=CreateService(SvcMgr,ServiceName.c_str(),ServiceDispName.c_str(),
           SERVICE_ALL_ACCESS,
           SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
           //SERVICE_AUTO_START
           SERVICE_DEMAND_START
           //SERVICE_DISABLED
           ,SERVICE_ERROR_NORMAL,
           ServiceFileName.c_str(),NULL,NULL,NULL,NULL,NULL);
       if(!Svc)RaiseLastOSError();
       CloseServiceHandle(Svc);
   }
   __finally
   {
      CloseServiceHandle(SvcMgr);
   }
}

 

--------------------------------------------------------------------

 HANDLE SvcMgr;
   HANDLE Svc;
   SvcMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
   if(!SvcMgr)
      RaiseLastOSError();
   try
   {
       Svc=CreateService(SvcMgr,"1111","111",
           SERVICE_ALL_ACCESS,
           SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
           //SERVICE_AUTO_START
            SERVICE_AUTO_START, //自动启动服务
            SERVICE_ERROR_IGNORE, //忽略错误

           exefile.c_str(),NULL,NULL,NULL,NULL,NULL);
       if(!Svc)RaiseLastOSError();
       CloseServiceHandle(Svc);
   }
   __finally
   {
      CloseServiceHandle(SvcMgr);
   }
--------------------------------------------------------------------
if(IsServiceRunning(ServiceName)==true)
        {
                StopServiceRunning(ServiceName);
        }
        UnInstallService(ServiceName);
--------------------------------------------------------------------
bool IsServiceRunning(LPCSTR SrvName)
{
    SC_HANDLE hService;
    SC_HANDLE hManager;
    SERVICE_STATUS stus;

    hManager = OpenSCManager(NULL, 0,
        SC_MANAGER_ALL_ACCESS);
    if (hManager==NULL) return false;

    memset(&stus, 0, sizeof(stus));
    hService = OpenService(hManager,
        SrvName, SERVICE_ALL_ACCESS);
    if (hService != NULL) {
        QueryServiceStatus(hService,
            &stus);
        CloseServiceHandle(hService);
    }
    CloseServiceHandle(hManager);

    //SERVICE_RUNNING||SERVICE_PAUSED
    if(stus.dwCurrentState == 4||stus.dwCurrentState == 7)
       return true;
    else
       return false;
}


bool StopServiceRunning(LPCSTR SrvName)
{
    SC_HANDLE hService;
    SC_HANDLE hManager;
    SERVICE_STATUS stus;

    hManager = OpenSCManager(NULL, 0,SC_MANAGER_ALL_ACCESS);
    if (hManager==NULL) return false;

    memset(&stus, 0, sizeof(stus));
    hService = OpenService(hManager,SrvName, SERVICE_ALL_ACCESS);
    if (hService != NULL) {
       ControlService(hService, SERVICE_CONTROL_STOP, &stus); //停止Service
        CloseServiceHandle(hService);
    }
    CloseServiceHandle(hManager);

    return stus.dwCurrentState == SERVICE_STOPPED;
}


void UnInstallService(AnsiString ServiceName)
{
   HANDLE SvcMgr;
   HANDLE Svc;
   SvcMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
   if(!SvcMgr)
      RaiseLastOSError();
   try
   {
       Svc=OpenService(SvcMgr,ServiceName.c_str(),SERVICE_ALL_ACCESS);
       if(!Svc)RaiseLastOSError();
       try
       {
          if(!DeleteService(Svc))RaiseLastOSError();
       }
       __finally
       {
          CloseServiceHandle(Svc);
       }
   }
   __finally
   {
      CloseServiceHandle(SvcMgr);
   }
}

--------------------------------------------------------------------
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值