QT 操作Windows系统服务

        Windows服务是在Windows操作系统上运行的后台应用程序,它们在系统启动时自动启动,并在后台持续运行,不需要用户交互。Windows服务的作用包括但不限于以下几个方面:1. 提供系统功能:许多Windows服务提供了系统级的功能和服务,如网络连接、文件共享、打印服务、安全认证、远程管理等。这些服务为用户和其他应用程序提供了基础设施和功能支持。2. 自动化任务:Windows服务可以用于执行自动化任务,如定期备份、数据同步、日志记录、定时任务等。它们可以在后台运行,无需用户干预,提供可靠的自动化功能。3. 后台通信和消息传递:Windows服务可以用于实现后台通信和消息传递,如消息队列、进程间通信等。它们可以在不同的应用程序之间传递数据和消息,实现应用程序之间的协作和集成。4. 系统监控和管理:Windows服务可以用于监控和管理系统状态和资源,如性能监控、事件日志、服务管理等。它们可以收集系统信息、监测系统性能,并提供管理接口和功能,帮助管理员维护和管理系统。
        Windows服务是在后台运行的应用程序,提供了系统级的功能和服务,执行自动化任务,实现后台通信和消息传递,以及监控和管理系统。它们为Windows操作系统提供了稳定、可靠和高效的功能支持。

        需要注意程序需要使用管理员权限启动才可以操作服务

QT 操作Windows系统服务目录

1 创建服务

2 删除服务

3 打开服务

4 关闭服务

5 启动服务

6 停止服务

7 自动启动

8 手动启动

9 查询服务

10 .h源文件


 本文作者原创,转载请附上文章出处与本文链接。

1 创建服务

///@ 创建服务
void MainWindow::newService()
{SC_HANDLE schandle = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); //打开服务管理SC_HANDLE h = ::CreateService(schandle,L"ServiceAPI", //服务名L"ServiceAPI-Test", //显示用的服务名SERVICE_ALL_ACCESS, //所有访问权限SERVICE_WIN32_OWN_PROCESS,  //私有类型SERVICE_AUTO_START, //自启动类型SERVICE_ERROR_NORMAL, //忽略错误处理L"D:/ServiceAPI.exe", //应用程序路径nullptr, nullptr, nullptr, nullptr, nullptr);::CloseServiceHandle(h); //关闭::CloseServiceHandle(schandle);//关闭::getchar(); //暂停
}

2 删除服务

///@ 删除服务
void MainWindow::deleteService()
{SC_HANDLE schandle = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); //打开服务管理SC_HANDLE h = ::OpenService(schandle, L"ServiceAPI", SERVICE_ALL_ACCESS); //打开要删除的服务if (h != NULL){if (::DeleteService(h)){qDebug() << "Service deleted successfully.";}else{if(GetLastError() == 1072)qDebug() << "Please restart Windows .....";elseqDebug() << "Failed to delete service. Error code: " << GetLastError();}::CloseServiceHandle(h); //关闭服务句柄}else{qDebug() << "Failed to open service. Error code: " << GetLastError();}::CloseServiceHandle(schandle); //关闭服务管理句柄::getchar(); //暂停
}

3 打开服务

///@ 打开服务
void MainWindow::openService()
{// 打开服务控制管理器hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);if (hSCM == NULL) {qDebug() << "OpenSCManager failed with error:" << GetLastError();return;}// 打开Windows 服务hService = OpenService(hSCM, TEXT("SQLWriter"), SERVICE_ALL_ACCESS);if (hService == NULL) {qDebug() << "OpenService failed with error:" << GetLastError();CloseServiceHandle(hSCM);return;}
}

4 关闭服务

///@ 关闭服务
void MainWindow::closeService()
{// 关闭服务和服务控制管理器的句柄CloseServiceHandle(hService);CloseServiceHandle(hSCM);
}

5 启动服务

///@ 启动服务
void MainWindow::startService()
{if (!StartService(hService, 0, NULL)) {qDebug() << "StartService failed with error:" << GetLastError();}
}

6 停止服务

///@ 停止服务
void MainWindow::stopService()
{SERVICE_STATUS status;if (!ControlService(hService, SERVICE_CONTROL_STOP, &status)) {qDebug() << "ControlService failed with error:" << GetLastError();}
}

7 自动启动

///@ 自动启用服务
void MainWindow::enableService()
{enable = true;if (!ChangeServiceConfig(hService,        // handle of serviceSERVICE_NO_CHANGE, // service type: no changeenable ? SERVICE_DEMAND_START : SERVICE_DISABLED,SERVICE_NO_CHANGE, // error control: no changeNULL,              // binary path: no changeNULL,              // load order group: no changeNULL,              // tag ID: no changeNULL,              // dependencies: no changeNULL,              // service start name: no changeNULL,              // password: no changeNULL))             // display name: no change{qDebug() << "ChangeServiceConfig failed with error:" << GetLastError();}
}

8 手动启动

///@ 手动启用服务
void MainWindow::manualService()
{enable = true;if (!ChangeServiceConfig(hService,        // handle of serviceSERVICE_NO_CHANGE, // service type: no changeenable ? SERVICE_AUTO_START : SERVICE_DISABLED, // service start type   SERVICE_DEMAND_STARTSERVICE_NO_CHANGE, // error control: no changeNULL,              // binary path: no changeNULL,              // load order group: no changeNULL,              // tag ID: no changeNULL,              // dependencies: no changeNULL,              // service start name: no changeNULL,              // password: no changeNULL))             // display name: no change{qDebug() << "ChangeServiceConfig failed with error:" << GetLastError();}
}

9 查询服务

void MainWindow::findService()
{QSettings servicesSettings("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services", QSettings::NativeFormat);QStringList services = servicesSettings.childGroups();for (const QString& service : services) {printServiceInfo(service);}
}
void MainWindow::printServiceInfo(const QString& serviceName)
{qDebug() << "服务名称: " << serviceName;    //Service NameQSettings serviceSettings("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\" + serviceName, QSettings::NativeFormat);QStringList keys = serviceSettings.allKeys();if(serviceSettings.value("DisplayName").toString() == "")return;qDebug() << "显示名称: " << serviceSettings.value("DisplayName").toString();qDebug() << "描述: " << serviceSettings.value("Description").toString();qDebug() << "映像路径: " << serviceSettings.value("ImagePath").toString();QString displayName = QCoreApplication::translate("WalletService", "@%SystemRoot%\\System32\\WalletService.dll,-1000");QString description = QCoreApplication::translate("WalletService", "@%SystemRoot%\\System32\\WalletService.dll,-1001");qDebug() << "显示名称:" << displayName;qDebug() << "描述:" << description;
}

10 .h源文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QDebug>
#include <QSettings>
#include <windows.h>
#include <winsvc.h>
#include <iostream>
#pragma comment(lib, "advapi32.lib")#define MAX_SERVICE_SIZE 1024 * 64
#define MAX_QUERY_SIZE   1024 * 8#pragma execution_character_set("utf-8")QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();SC_HANDLE hSCM;SC_HANDLE hService;
private:Ui::MainWindow *ui;bool enable;void openService();void closeService();void findService();void printServiceInfo(const QString& serviceName);void startService();void stopService();void newService();void deleteService();void enableService();void manualService();void disabledService();
};
#endif // MAINWINDOW_H

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

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

相关文章

大数据技术学习笔记(二)—— Hadoop运行环境的搭建

目录 1 模版虚拟机准备1.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压3.2 配置…

腾讯地图基本使用(撒点位,点位点击,弹框等...功能) 搭配Vue3

腾讯地图的基础注册账号 展示地图等基础功能在专栏的上一篇内容 大家有兴趣可以去看一看 今天说的是腾讯地图的在稍微一点的基础操作 话不多说 直接上代码 var marker ref(null) var map var center ref(null) // 地图初始化 const initMap () > {//定义地图中心点坐标…

不想加班的小伙伴们,请把这四个神器焊在电脑上~

今天又来给大家分享干货啦&#xff0c;如果你下载视频没渠道&#xff0c;写方案没灵感思路&#xff0c;做表格太慢&#xff0c;做海报太复杂&#xff0c;那你一点要看这一篇&#xff0c;今天分享的四个宝藏网站专门解决以上问题&#xff0c;一起来看看吧&#xff01; 一、WeDow…

SAP-QM-动态检验规则

Dynamic Modification Rule &#xff08;动态修改规则&#xff09; 1、决定样本大小的方式有3种&#xff1a; 手动输入比例大小采样过程 物料主数据质量视图 2、采样过程的创建方式有2种 跟批量大小有关系&#xff1a;百分比/AQL跟批量大小没有关系&#xff1a;固定值 而当…

【RNA biology】RNA的多功能性与早期生命进化

文章目录 RNARNA plays core functions in Central Dogma of BiologyrRNAsnRNA RNA worldReplication催化作用感知环境变化并作出响应 来自Manolis Kellis教授&#xff08;MIT计算生物学主任&#xff09;的课 油管链接&#xff1a;6.047/6.878 Lecture 7 - RNA folding, RNA wo…

概念解析 | 心脏电活动和机械活动之间的关系

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:心脏电活动和机械活动之间的关系。 心跳的交响乐:心脏电活动与机械活动之间的关联 一、背景介绍 心脏通过不断跳动将血液输送到我们身体的每一个角落。而这个跳动过程,是…

3D测量之圆孔测量 拟合圆 点云变换

0. 效果展示 1. 圆孔测量介绍 此文中的圆孔测量是一项3D视觉技术,旨在精确测量物体表面上的圆孔的直径和中心坐标。通过使用高精度3D相机(线激光轮廓仪或结构体等)采集原始点云数据,通过3D视觉算法能够快速、准确地分析物体上的圆孔特征,为制造和工程领域提供了强大的测量…

插入排序(学习笔记)

插入排序 每一轮插入排序后的结果与打扑克牌取牌原理相似&#xff0c;将取到的牌插入到合适的位置&#xff0c;但在程序实现方面还是基于交换的算法。 它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而一个新的、记录数增1的有序表。 import java.util.…

【(数据结构)—— 基于单链表实现通讯录】

&#xff08;数据结构&#xff09;—— 基于单链表实现通讯录 一.通讯录的功能介绍1.基于单链表实现通讯录(1). 知识要求(2). 功能要求 二.通讯录的代码实现1.通讯录的底层结构(单链表)(1).思路展示(2).底层代码实现(单链表)1.单链表头文件 —— &#xff08;函数的定义&#x…

Hive安装配置 - 内嵌模式

文章目录 一、Hive运行模式二、安装配置内嵌模式Hive&#xff08;一&#xff09;下载hive安装包&#xff08;二&#xff09;上传hive安装包&#xff08;三&#xff09;解压缩hive安装包&#xff08;四&#xff09;配置hive环境变量&#xff08;五&#xff09;关联Hadoop&#x…

【超详细】CentOS 7安装MySQL 5.7【安装及密码配置、字符集配置、远程连接配置】

准备工作&#xff1a;CentOS 7系统&#xff0c;并确保可以联通网络 1、获取MySQL 5.7 Community Repository软件包 注意&#xff1a;这里使用的是root用户身份。 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm2、安装软件包 rpm -ivh mysql5…

华为荣耀手机,开启开发者选项,hbuilder调试依然找不到

我的手机是华为荣耀50&#xff0c;其他华为手机不知道是不是这个问题哦 解决办法&#xff1a;usb配置&#xff0c;选择音频来源 然后就可以了

2020年江西省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书样题

2020年江西省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书 样题 赛项时间 9:00-12:00&#xff0c;共计3小时。 赛项信息 赛项内容 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备配置防护 任务1 网络平台搭建 9:00-12:00 1…

MS17010(永恒之蓝)漏洞实战

曾因苦难多壮志&#xff0c;不教红尘惑坚心。 工具检测 实战过程 使用搜索命令&#xff0c;搜索ms17_010 search ms17_010 搜索网段中主机漏洞 use auxiliary/scanner/smb/smb_ms17_010 照例&#xff0c;show options 看一下配置 设置网段&#xff0c;run运行就行了 使用攻…

浅谈云原生

目录 1. 云原生是什么&#xff1f; 2. 云原生四要素 2.1 微服务 2.2 容器化 2.3 DevOps 2.4 持续交付 3. 具体的云原生技术有哪些&#xff1f; 3.1 容器 (Containers) 3.2 微服务 (Microservices) 3.3 服务网格 (Service Meshes) 3.4 不可变基础设施 (Immutable Inf…

Debian衍生桌面项目SpiralLinux12.231001发布

导读SpiralLinux 是一个从 Debian 衍生出来的桌面项目&#xff0c;其重点是在所有主要桌面环境中实现简洁性和开箱即用的可用性。 spiral Linux 是为刚接触 Linux 世界的人们量身定制的发行版。这是 GeckoLinux 开发人员的创意&#xff0c;他更喜欢保持匿名。尽管他不愿透露姓…

网安周报|OpenSSF 推出恶意软件包存储库

1.OpenSSF 推出恶意软件包存储库 为了应对恶意开源软件包日益增长的威胁&#xff0c;开源安全基金会 ( OpenSSF ) 推出了一项名为“恶意软件包存储库”的新计划。该存储库可能会成为打击恶意代码的主要参与者&#xff0c;旨在增强开源软件生态系统的安全性和完整性。该存储库已…

linux-守护进程daemon

linux-守护进程daemon 代码实现 main.c运行结果 代码实现 main.c //pName&#xff1a;程序名 //facility&#xff1a; 守护进程&#xff0c;输出日志类型 302页 #include<signal.h> #include<syslog.h> #include<fcntl.h> static int daemon_proc 0; #defin…

景联文科技语音数据标注:AUTO-AVSR模型和数据助力视听语音识别

ASR、VSR和AV-ASR的性能提高很大程度上归功于更大的模型和训练数据集的使用。 更大的模型具有更多的参数和更强大的表示能力&#xff0c;能够捕获到更多的语言特征和上下文信息&#xff0c;从而提高识别准确性&#xff1b;更大的训练集也能带来更好的性能&#xff0c;更多的数据…

数据结构-----图(graph)的储存和创建

目录 前言 图的储存结构 1.邻接矩阵 无向图的邻接矩阵 有向图的邻接矩阵 网&#xff08;赋权图&#xff09;的邻接矩阵 代码表示 2.邻接表 无向图的邻接表 有向图的邻接表 代码表示 3.邻接矩阵和邻接表对比 邻接矩阵 邻接表 图的创建 1.邻接矩阵创建图&#xff0…