Files
CloseWindowsService/main.c
T

77 lines
4.1 KiB
C
Raw Normal View History

2026-09-15 00:06:14 +08:00
#include <DisableAndStopService.h>
#include <shlobj.h> // 需要包含此头文件来使用 IsUserAnAdmin()
#include <stdio.h>
int main() {
SetConsoleOutputCP(65001);
// 1. 检查当前是否拥有管理员权限
if (!IsUserAnAdmin()) {
char szPath[MAX_PATH];
// 获取当前程序自身的绝对路径
GetModuleFileNameA(NULL, szPath, MAX_PATH);
// 使用 "runas" 参数重新启动自身,这会强制 Windows 弹出 UAC 提权提示
HINSTANCE hInst = ShellExecuteA(NULL, "runas", szPath, NULL, NULL, SW_SHOW);
// 如果返回值大于 32,说明用户在弹窗中点击了“是”,新进程已成功以管理员身份拉起
if ((INT_PTR)hInst > 32) {
return 0; // 关闭当前这个没有权限的旧进程
} else {
// 用户点击了“否”或者关闭了弹窗
printf("[-] 错误:此程序必须以管理员身份运行才能修改系统服务!\n");
system("pause");
return 1;
}
}
// 💡 在这个数组里填入你想批量关闭的服务名称 (必须是 Service Name,非 Display Name)
const char* servicesToClose[] = {
"DiagTrack", // 微软后台遥测/用户体验收集
"DPS", // 诊断策略服务
"WSearch", // Windows 本地搜索索引 (不用本地搜索可关)
"TabletInputService", // 触摸键盘和手写面板服务
"Spooler", // 打印机后台处理 (家里/公司没打印机可关)
"MapsBroker", // 下载地图管理器 (不下载离线地图可关)
"XblAuthManager", // Xbox Live 认证管理器 (不玩 Xbox 游戏可关)
"XblGameSave", // Xbox Live 游戏保存 (不玩 Xbox 游戏可关)
"dmwappushservice", // 路由设备管理中的 WAP 推送消息,本质上属于辅助遥测(隐私数据收集)的一部分
"WHESVC", // 这是 Windows 11 较新版本中加入的后台服务,用于监控 CPU 负载、温度、电源策略等,并在变卡时记录本地跟踪数据
"RemoteRegistry", // 允许远程用户修改本地电脑的注册表
"RemoteAccess", // 在局域网和广域网环境中提供路由、远程连接服务
"Fax", // 管理电脑收发传真
"EntAppMgmtSvc", // 企业级应用合规性管理
"WpcMonService", // 家长控制服务,用于限制儿童账户的使用时间和浏览内容
"WerSvc", // 微软错误报告生成 (卡顿元凶之一)
"WpnService", // 微软推送通知、小组件实时刷新
"Browser", // 局域网计算机浏览器列表
"lmhosts", // NetBIOS 局域网历史遗留解析
"Dosvc", // 传递优化 (后台偷偷 P2P 上传补丁吃带宽)
"WbioSrvc", // 生物识别 (无指纹/面部解锁的台式机可关)
"RetailDemo", // 线下实体店样机演示模式
// === 小众硬件与上古僵尸服务(无设备直接关) ===
"WalletService", // 微软钱包服务
"SCardSvr", // 智能卡读卡器服务
"ScDeviceEnum", // 智能卡设备枚举
//"StiSvc", // 扫描仪与照相机图像输入
"ALG", // 历史遗留的应用层网关
"AxInstSV", // 已经淘汰的 ActiveX 插件安装服务
};
// 计算数组中服务的总数量
int totalServices = sizeof(servicesToClose) / sizeof(servicesToClose[0]);
printf("==================================================\n");
printf(" Windows 11 服务批量优化脚本 (C语言版) \n");
printf("==================================================\n\n");
// 循环遍历数组,依次关闭服务
for (int i = 0; i < totalServices; i++) {
DisableAndStopService(servicesToClose[i]);
}
printf("\n所有指定服务处理完毕。\n");
system("pause");
return 0;
}