Qt重启windows服务

日常开发中,会遇到改变某个服务的参数,并进行重启(例如Redis断电恢复机制)

需要程序拥有UAC权限,并且调用如下API才能对windows服务进行重启:

#include "windows.h"#pragma comment(lib, "advapi32.lib")bool ConfigCenter::ReStartServiceByName(std::string strDestServiceName)
{bool bServiceStatus     = FALSE;SC_HANDLE schSCManager  =  nullptr ;SC_HANDLE schService    =  nullptr ;DWORD dwBytesNeeded     =  0 ;SERVICE_STATUS_PROCESS ssStatus;char szSvcName[MAX_PATH] = {0};memcpy_s(szSvcName,MAX_PATH,strDestServiceName.c_str(),strDestServiceName.length());//! 获取一个服务控制管理器数据库的句柄schSCManager = OpenSCManager(nullptr ,                           // local computernullptr ,                           // ServicesActive databaseSC_MANAGER_ALL_ACCESS);             // full access rightsif(schSCManager == nullptr) {qDebug() << "OpenSCManager fail" << endl;return bServiceStatus;}//! 获取该服务在服务控制管理器数据库中的句柄schService = OpenServiceA(schSCManager,                       // SCM databaseszSvcName,                          // name of serviceSERVICE_ALL_ACCESS/* | DELETE*/);   // full accessif(schService == nullptr) {CloseServiceHandle(schSCManager);qDebug() << "Get a handle to the service fail" << endl;return bServiceStatus;}//! 查询该服务的当前状态if(!QueryServiceStatusEx(schService,                         // handle to serviceSC_STATUS_PROCESS_INFO,             // information level(LPBYTE) &ssStatus,                 // address of structuresizeof (SERVICE_STATUS_PROCESS),    // size of structure&dwBytesNeeded ) )                  // size needed if buffer is too small{CloseServiceHandle(schService);CloseServiceHandle(schSCManager);qDebug() << "QueryServiceStatusEx fail" << endl;return bServiceStatus;}else{switch (ssStatus.dwCurrentState){case  SERVICE_STOPPED:case  SERVICE_STOP_PENDING:qDebug() << szSvcName << " Service status is Stop" << endl;break ;case  SERVICE_PAUSED:case  SERVICE_PAUSE_PENDING:qDebug() << szSvcName << " Service status is Pause" << endl;break ;case  SERVICE_CONTINUE_PENDING:case  SERVICE_RUNNING:case  SERVICE_START_PENDING:qDebug() << szSvcName << " Service status is Running" << endl;bServiceStatus = TRUE;break ;}}//! 停止该服务if(bServiceStatus == TRUE) {SERVICE_STATUS status;if (!ControlService(schService, SERVICE_CONTROL_STOP, &status)) {qDebug() << "ControlService failed with error:" << GetLastError();return !bServiceStatus;}}//! 启动该服务StartService(schService,0,nullptr);Sleep(500);//! 获得服务的当前状态QueryServiceStatusEx(schService,SC_STATUS_PROCESS_INFO,(LPBYTE) &ssStatus,sizeof (SERVICE_STATUS_PROCESS),&dwBytesNeeded );if (SERVICE_RUNNING == ssStatus.dwCurrentState){bServiceStatus = TRUE;}CloseServiceHandle(schService);CloseServiceHandle(schSCManager);return bServiceStatus;
}

参考文章:https://www.cnblogs.com/TechNomad/p/17669231.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在CMake中打印日志信息

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...) (无) &#xff1a;重要消息 STATUS &#xff1a;非重要消息 WARNING&#xff1a;CMake 警告, 会继续执行 AUTHOR_WARNING&#xff1a;CMake 警告 (dev), 会继续执行 SEN…

面试题之TCP粘包现象及其解决方法

计算机网络每层的基本单位&#xff1a;物理层&#xff08;第一层&#xff09;&#xff1a;比特流&#xff1b;数据链路层&#xff08;第二层&#xff09;&#xff1a;数据帧&#xff1b;网络层&#xff08;第三层&#xff09;&#xff1a;数据包&#xff1b;传输层&#xff08;…

代码随想录 Day43 动态规划11 LeetCode T309 买卖股票的最佳时期含冷冻期 T714买卖股票的最佳时机含手续费

LeetCode T309 买卖股票的最佳时机含冷冻期 题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 这题其实就是将卖出的状态拆分成三个状态 1.前两天就卖出并一直保持卖出的状态 2.今天卖出的状态 3.今天是冷冻期的状态 当然还有一个…

一个java文件的JVM之旅

准备 我是小C同学编写得一个java文件&#xff0c;如何实现我的功能呢&#xff1f;需要去JVM(Java Virtual Machine)这个地方旅行。 变身 我高高兴兴的来到JVM&#xff0c;想要开始JVM之旅&#xff0c;它确说&#xff1a;“现在的我还不能进去&#xff0c;需要做一次转换&#x…

【左程云算法全讲7】二叉树基础

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于左程云算法课程进行的&#xff0c;每个知识点的修正和深入主要参考…

学习c#的第六天

目录 C# 判断 if 语句 嵌套 if 语句 switch 语句 嵌套 switch 语句 ? : 运算符 C# 循环 循环类型 while 循环 for/foreach 循环 do...while 循环 嵌套循环 循环控制语句 break 语句 continue 语句 无限循环 C# 判断 if 语句 在C#中&#xff0c;if语句用于根…

为什么要空构造器

空构造器&#xff08;无参构造器&#xff09; 1.**为了无参创建对象**某些框架和工具&#xff0c;如JavaBeans&#xff0c;也依赖于默认的无参构造器&#xff0c;以便在创建对象时进行实例化。 2. **反射&#xff1a;** 在Java中&#xff0c;可以使用反射机制来动态地获取类的…

数据库数据恢复—无备份,未开启binlog的MySQL误删除怎么恢复数据

数据库数据恢复环境&#xff1a; 一台本地windows sever操作系统服务器&#xff0c;服务器上部署mysql数据库单实例&#xff0c;引擎类型为innodb&#xff0c;表内数据存储所使用表空间类型为独立表空间。无数据库备份&#xff0c;未开启binlog。 数据库故障&分析&#xf…

玩了个锤子游戏小程序搭建流程:探索深度与逻辑的结合

随着移动互联网的普及&#xff0c;小程序已经成为了越来越多用户的选择。在这个背景下&#xff0c;玩了个锤子游戏小程序应运而生&#xff0c;它为用户提供了一个全新的游戏体验。那么&#xff0c;如何搭建这样一个小程序呢&#xff1f;本文将为大家详细介绍玩了个锤子游戏小程…

【华为OD机试AB高分必刷题目】朋友圈(C++-并查集Union-Find实现)

🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,高分通过! 文章目录 【华为OD机试AB高分必刷题目】朋友圈(C++-并查集Union-Find实现)题目描述解题思路C++题解代码代码OJ评判结果代码讲解寄语【华为OD机试AB高分…

一文图解爬虫(spider)

—引导语 互联网&#xff08;Internet&#xff09;进化到今天&#xff0c;已然成为爬虫&#xff08;Spider&#xff09;编制的天下。从个体升级为组合、从组合联结为网络。因为有爬虫&#xff0c;我们可以更迅速地触达新鲜“网事”。 那么爬虫究竟如何工作的呢&#xff1f;允许…

守护进程daemon(),C 库函数asctime、localtime,UDEV的配置文件,开机自启动,自动挂载U盘

一、守护进程 二、daemon()函数 三、C 库函数asctime、localtime 四、设置守护进程开机自启动 五、守护进程应用 编写判断守护进程是否在运行的程序 守护进程不让控制程序退出 把相关守护进程设置成开机自启动 六、dmesg 七、UDEV的配置文件&#xff08;udev的rules编写&am…

clang插件对llvm源码插桩,分析函数调用日志(1)--google镜像

tick_plot__compile.ipynb 时长边界_时上链异数: 长短函数调用链列表 0. 用matplotlib找系统中字体文件大于1MB的 中文字体通常很大&#xff0c;这样过滤出的 通常有中文字体 结果中 看名字 ‘AR PL UMing CN’ 果然是中文字体 from matplotlib.font_manager import fontManag…

景联文科技助力金融机构强化身份验证,提供高质量人像采集服务

随着社会的数字化和智能化进程的加速&#xff0c;人像采集在金融机构身份认证领域中发挥重要作用&#xff0c;为人们的生活带来更多便利和安全保障。 金融机构在身份验证上的痛点主要包括以下方面&#xff1a; 身份盗用和欺诈风险&#xff1a;传统身份验证方式可能存在漏洞&am…

NOIP2023模拟16联测37 大眼鸹猫

题目大意 有两个长度为 n n n的序列 a , b a,b a,b&#xff0c;这两个序列都是单调不降的。 你可以对 a a a进行不超过 m m m次操作&#xff0c;每次操作你可以选择一个 i i i满足 1 ≤ i ≤ n 1\leq i\leq n 1≤i≤n&#xff0c;然后选择一个整数&#xff08;可以是负数&…

C#调用管理员身份运行程序

C#运行ps1文件命令&#xff0c;一般都直接启动进程&#xff0c;以管理员身份调用powershell。 有两种方式&#xff0c;一种直接在ps1文件中指定管理员身份&#xff0c;比如ps1文件为&#xff1a; Start-Process powershell -ArgumentList get-windowsoptionalfeature -online -…

【已解决】ModuleNotFoundError: No module named ‘sklearn‘

问题描述 Traceback (most recent call last): File "/home/visionx/nickle/temp/SimCLR/linear_evaluation.py", line 210, in <module> from sklearn.manifold import TSNE ModuleNotFoundError: No module named sklearn 解决办法 pip install numpy…

体验前所未有的显示器管理体验:BetterDisplay Pro Mac

在现代的数字化时代&#xff0c;显示器是我们日常生活和工作中不可或缺的一部分。从笔记本电脑到台式机&#xff0c;从平板电脑到手机&#xff0c;几乎所有的电子设备都配备了显示器。然而&#xff0c;对于专业人士和从事设计行业的人来说&#xff0c;仅仅依靠系统自带的显示器…

某电力设计公司绩效考核优化项目成功案例纪实

——引入角色定位考核法&#xff0c;建立多维度评价体系&#xff0c;支持业务转型后的客观评价 【客户行业】电力行业 【问题类型】绩效考核 【客户背景及现状分析】 某电力设计公司成立于2000年左右&#xff0c;是一家从事输变电工程勘察、设计、咨询的专业公司&#xff0c…