看流星社区

 找回密码
 注册账号
查看: 2100|回复: 0

C++ 安装、删除、启动服务源码

[复制链接]

该用户从未签到

发表于 2016-9-21 15:50:45 | 显示全部楼层 |阅读模式

//安装服务
BOOL CreateSampleService()
{
      SC_HANDLE schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);   // 打开服务控制管理数据库,并返回服务控制管理数据库的句柄
      if (schSCManager == NULL)
      {
          return FALSE;
      }
      SC_HANDLE schService = CreateService(schSCManager,L"Regprotect",L"Regprotect",
                                           SERVICE_ALL_ACCESS ,
                                           SERVICE_WIN32_OWN_PROCESS,
                                           SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,
                                           L"C:\\Windows\\SysWOW64\\RegProtect\\RegProtect.exe",
                                           NULL,NULL,NULL,NULL,NULL);    //安装服务
      if(schService == NULL)
      {
          return FALSE;
      }
      CloseServiceHandle(schSCManager);    //关闭服务句柄
      CloseServiceHandle(schService);
      StartSampleService();   //启动服务
      return TRUE;
}

//删除服务
BOOL DeliteSampleService()
{
      SERVICE_STATUS status;
      SC_HANDLE schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);   // 打开服务控制管
                                                        //理数据库,并返回服务控制管理数据库的句柄
      if(schSCManager == NULL)
      {
          return FALSE;
      }
      SC_HANDLE schService = OpenService(schSCManager, L"Regprotect",
                                         SERVICE_ALL_ACCESS | DELETE);   // 获得服务句柄
      if(schService == NULL)
      {
         return FALSE;
      }
      QueryServiceStatus(schService, &status);  // 获得服务的当前状态
      if (status.dwCurrentState != SERVICE_STOPPED)   // 如果服务不处于停止状态,则将其状态设置为
                                                      //停止状态
           ControlService(schService,SERVICE_CONTROL_STOP, &status);
      DeleteService(schService);    // 删除服务
      CloseServiceHandle(schSCManager);  // 关闭服务句柄
      CloseServiceHandle(schService);
      return TRUE;
}

//启动服务
BOOL StartSampleService()
{
      SERVICE_STATUS status;
      SC_HANDLE schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);   // 打开服务控制管
                                                        //理数据库,并返回服务控制管理数据库的句柄
      if (schSCManager == NULL)
      {
          return FALSE;
      }
      SC_HANDLE schService = OpenService(schSCManager, L"Regprotect",
                                         SERVICE_ALL_ACCESS | DELETE);    // 获得服务句柄
      if(schService == NULL)
      {
          return FALSE;
      }
      QueryServiceStatus(schService, &status);   // 获得服务的当前状态
      if (status.dwCurrentState = SERVICE_STOPPED)   // 如果服务处于停止状态,则将其状态设置为启动
                                                     //状态
            StartService(schService, 0, NULL);   //启动服务
      CloseServiceHandle(schSCManager);   // 关闭服务句柄
      CloseServiceHandle(schService);
      retutn TRUE;
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 19:12

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表