C#启动系统服务与注册表操作

用 C#搞服务启动,操作注册表和控制服务都不难,关键是知道路径在哪、值怎么改。像ACPI这种系统服务,一般默认是禁用的,用注册表把启动类型从4改成3,再用ServiceController手动拉起来,挺方便的。

注册表的服务项SYSTEM\CurrentControlSet\Services下面,每个服务都有自己的子项。服务要自动或手动启动,就得看它的Start键了。比如0是自动启动,3是手动启动,4就禁用了。

C#读写注册表挺直接的,RegistryKey配合OpenSubKey方法就能打开子项,GetValue拿当前值,SetValue直接写进去就行。记得带上true参数,要写入的话必须是可写方式。

再就是服务启动部分,用System.ServiceProcess.ServiceController类。实例化的时候传服务名,想启动就Start()一下,想停也有Stop()。不过别忘了,你这程序得用管理员权限跑。

完整示例代码我贴在下面了,逻辑清楚、写法简单,新手看也能明白:

using Microsoft.Win32;
using System.ServiceProcess;

string keyPath = @"SYSTEM\CurrentControlSet\Services\ACPI"; RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, true);

int val = -1; bool bConverted = Int32.TryParse(key.GetValue("Start").ToString(), out val);

if (bConverted && val == 4) { key.SetValue("Start", 3); // 设置为手动启动 }

ServiceController service = new ServiceController("ACPI"); service.Start();

小提示:注册表搞错地方会影响系统稳定,测试之前最好备份下;还有就是服务如果有依赖项,不是说启就启,得留意下服务的状态。

如果你在做系统管理类工具,或者搞点自动化运维的活儿,这方法真的还挺实用的。顺便放几篇扩展阅读,想深入研究可以点进去看看:

txt 文件大小:429B