|
|
本帖最后由 sfanking 于 2026-11-15 08:28 编辑
系统服务优化工具 (Service Optimizer)
一个 Windows 系统服务管理辅助工具。ini 驱动的声明式执行器——把要改的服务写进 eso.ini,程序照着实施;界面是这个 ini 的便捷前端。界面框架中英文双语(工具栏、菜单、对话框、
列头、状态栏),功能组名与服务名一律照 eso.ini 与系统的原文显示,不做翻译。绿色便携(单个 exe,无需安装)。
核心原则:本工具只能改变系统服务的状态,绝不创建、删除或卸载任何系统服务。
界面上所有带"删除 / 移除"字样的入口,实际只作用于本软件自己的配置文件 eso.ini—— 把服务从某个功能组的配置里摘出去,系统服务本身毫发无损。
关于本工具与 Easy Service Optimizer
本工具的灵感来自 Easy Service Optimizer(sordum.org,作者 Sordum)——一个用 ini 描述服务启动类型的命令行/小型工具,本身即是"配置文件即真相"的做法。本工具沿用了这套
ini 驱动的声明式执行器思路,并在此基础上增加了「功能组」这一层:把服务按功能归类、支持组级与行级两层勾选、在界面上可视化编辑。
需要说明的是:本工具只借鉴这一设计思路,并非 Easy Service Optimizer 的分支或衍生版本,不兼容其 ini 格式。 两者配置文件互不通用——本工具只识别 [Settings] / [Groups] /[Group.*] / [Service.*] 四类段,参见下文「配置文件」。
ini 驱动的声明式执行器
eso.ini 是唯一的真相来源。 勾选状态、目标启动类型全部持久化在 ini 里:
启动时程序按 ini 渲染界面(哪些组勾选、哪些服务行勾选、每行目标是什么启动类型);
点「应用设置 / 恢复设置」时,程序按 ini 的声明去操作系统服务;
界面上勾勾点点,本质是在编辑这份 ini。
这意味着不经过界面、直接改 ini 再启动程序是完全正当的用法——批量预置配置、跨机器迁移、或用别的工具生成配置后交给本程序执行,都可以。
手工编写 ini 的最小示例
[Settings]
Language=zh-CN
[Groups]
Order=HyperV;MyOwn
[Group.HyperV]
Name=Hyper-V 虚拟机
Enabled=1 ; 勾选:这一组参与应用
Services=vmicvss;vmcompute ; 组内服务,分号分隔
[Group.MyOwn]
Name=我的自定义组
Enabled=0 ; 不勾选:整组不参与
Services=Spooler
[Service.vmicvss]
StartType=Disabled ; 应用时把这个服务设成"禁用"
Checked=1 ; 这一行参与应用
[Service.WebClient]
StartType=Automatic ; 不属于任何组也能生效
Checked=1
要点:
Enabled=1 组级开关,决定该组是否参与「应用设置 / 恢复设置」。
Checked=1 行级开关,决定组内某个服务是否参与;与组级独立,两层都选才生效。
[Service.<名>] 段可以独立存在,不必属于任何功能组。这类服务会在左侧树上以「独立服务(ini 声明)」 组的形式出现(该组是只读视图,不会被写回 [Groups] Order=)。
注意「从功能组移除」只解除服务与组的关系,不会删掉 [Service.<名>] 段——所以被移除的服务会以"独立服务"的身份继续参与应用 / 恢复(它的 Checked=1 还在)。若希望它彻底不参与,请把该段的 Checked 改成 0,或整段删掉;这也是"ini 即真相"的直接体现。
StartType 取值:Automatic / Manual / Disabled。
文件编码为 UTF-16 LE,首次运行自动创建。请勿存成 UTF-8 BOM,会读取失败。
服务名不区分大小写,但必须与系统一致。
关于「服务在系统中不存在」的提示
应用 / 恢复完成后,如果 ini 里声明的某些服务在本机找不到,结果里会附一行说明。注意这是WMI 的服务列表判定,与注册表不完全一致:
程序通过 WMI 的 Win32_Service 枚举服务;
某些按用户会话实例化的服务模板(如 CaptureService)在注册表里是真实存在的键,但 Win32_Service 只列出实例化后的派生项(如 CaptureService_397e8),裸名不出现 → 会被判为"不存在";
从别的机器复制过来的 ini,其中的服务本机没装,也会命中这一提示;
手写 ini 拼错服务名同理。
这类服务会被跳过(不会报错中断),其余服务照常应用。
功能特性
功能分组管理:32 个预设功能组(Hyper-V、Windows 更新、打印机、Windows 应用商店、Defender…),可自行新建 / 重命名 / 删除功能组,也可把任意服务添加进任意组。
左侧功能组树的右键菜单里有「添加功能组 / 编辑功能组 / 删除功能组」,与右侧服务列表的「添加服务 / 编辑 / 从功能组移除」对称。
服务总览:列出全部系统服务,显示『服务名称 / 显示名称 / 状态 / 启动类型 / 实际启动类型 / 恢复类型 / 原始类型』。
实际启动类型对照:把"你在本工具里设定的启动类型"与"系统当前实际的启动类型"并列显示。两者不一致时整行标为橙色并在详情面板给出提示,避免"设了没生效"被忽略。
启动类型设置:自动 / 手动 / 禁用。跨组批量应用——作用于左侧所有已勾选的功能组,组内再逐行判断是否已勾选;同一个服务被多个组引用时只处理一次。
恢复设置:同样是跨组批量,作用于左侧所有已勾选的功能组。恢复的目标是每个服务各自的「恢复类型」(在编辑对话框里设置)——界面上看到什么,就恢复成什么。若某个服务没有显式设置恢复类型,才回落到它的「原始类型」(首次见到该服务时记录的 Windows 默认类型)。
服务操作:启动 / 停止 / 重启单个服务,以及一键刷新全部服务的状态与实际启动类型。
注册表定位:右键服务可在注册表中定位到该服务的配置项。(服务键位于 HKLM\SYSTEM\CurrentControlSet\Services\<服务名>)。只打开、只定位,不修改任何注册表内容,改不改、怎么改都由使用者自己决定。
实现方式:先关掉已在运行的注册表编辑器,再把 regedit 自己的"上次位置"(HKCU\...\Applets\Regedit)设为该服务键并启动 regedit —— 因此注册表打开时就直接停在该服务上。这是本工具唯一会写入注册表的地方,且写的是注册表编辑器自身的位置记录,不涉及任何服务配置项。
中英文界面:中文 / English 即时切换,选择结果保存在配置中。
双语只覆盖界面框架——工具栏、右键菜单、对话框、各列列头、状态栏、提示文案。
功能组名与服务名不做翻译:左侧树上的组名就是 eso.ini 里 Name= 的原文(你写成什么就显示什么,中英文界面下完全一致),服务名与显示名称来自系统本身。这样既不会出现"程序硬编码的英文名盖掉你自己起的组名",也保证同一条组在两种语言下始终指向同一个 [Group.<id>]。
自动提权:通过内嵌 manifest 申请管理员权限(改服务启动类型必需)。
绿色便携:单文件输出,不写系统目录,配置只落在 exe 同目录的 eso.ini。
系统要求
Windows 7 / 8 / 8.1 / 10 / 11
.NET Framework 4.0(完整版;本程序使用 System.Management,Client Profile 不支持)
管理员权限
程序为 32 位 (x86) 构建
关于在 WinPE 中运行
WinPE 默认不包含 .NET Framework,也不含本工具枚举服务所依赖的 WMI 组件,需要在制作WinPE 镜像时自行集成 WinPE-NetFx、WinPE-WMI 等可选组件(注意 WinPE-WMI 依赖 WinPE-NetFx)。
另外程序为 32 位,目标 WinPE 还需具备运行 32 位程序的能力。
WinPE 里的 .NET 是子集(官方明确列出缺 WPF、部分控件库能力受限等),因此本工具在WinPE 下的可用程度需以实际环境实测为准,本文档不对其作出保证。
使用方法
运行 ServiceOptimizer.exe(会请求管理员权限)。
在左侧树上勾选要参与批量操作的功能组(点行首方块;这一步决定「应用 / 恢复」的作用范围,与右侧当前显示哪一组无关)。
逐个进入各组,勾选要处理的服务行(勾选框在「选择」列);未勾选的行不会被处理。
组勾选与行勾选是两层独立的选择:组勾选决定"这个组参不参与",行勾选决定"组里哪几行参与"。
选中某行后点工具栏「编辑」(或右键 →「编辑」),在弹出的对话框里修改该服务的启动类型与恢复类型。
点「应用设置」把改动写入系统 —— 作用于步骤 2 里勾选的全部功能组。
状态栏会实时显示 已选功能组 N 个(应用/恢复的作用范围)。
想还原时点「恢复设置」,同样作用于所有已勾选的功能组,恢复规则见上文。
需要重新读取系统真实状态时,点「刷新服务」。
想对照系统原生视图(或用 SCM 才有的高级功能)时,点「打开 Windows 服务」调出 services.msc。
下载:https://wwarh.lanzouc.com/iFLDU4cf59gh 密码:4yhf |
评分
-
查看全部评分
|