C#一键关闭启动服务,一键禁用服务

每次装机或者其他情况,需要手动把不必要的服务关闭或者禁用,这个时候一个一个关闭是不是非常麻烦!通过C#编写程序来一键完成这些繁杂的操作,还可以做成一个系统优化的小程序,来帮助用户一键关闭那些不需要的服务!


首先,操作这些东西肯定需要操作注册表,这时候需要一个注册表操作类

 

//注册表操作
public class GF_RegReadWrite
{
 
    /// <summary>
    /// 读取路径为keypath,键名为keyname的注册表键值,缺省返回def
    /// </summary>
    /// <param name="rootkey"></param>
    /// <param name="keypath">路径</param>
    /// <param name="keyname">键名</param>
    /// <param name="rtn">默认为null</param>
    /// <returns></returns>        
    static public bool GetRegVal(RegistryKey rootkey, string keypath, string keyname, out string rtn)
    {
        rtn = "";
        try
        {
            RegistryKey key = rootkey.OpenSubKey(keypath);
            rtn = key.GetValue(keyname).ToString();
            key.Close();
            return true;
        }
        catch
        {
            return false;
        }
    }
 
    /// <summary>
    /// 设置路径为keypath,键名为keyname的注册表键值为keyval
    /// </summary>
    /// <param name="rootkey"></param>
    /// <param name="keypath"></param>
    /// <param name="keyname"></param>
    /// <param name="keyval"></param>
    /// <returns></returns>
    static public bool SetRegVal(RegistryKey rootkey, string keypath, string keyname, string keyval)
    {
        try
        {
            RegistryKey key = rootkey.OpenSubKey(keypath, true);
            if (key == null)
                key = rootkey.CreateSubKey(keypath);
            key.SetValue(keyname, (object)keyval);
            key.Close();
            return true;
        }
        catch
        {
            return false;
        }
    }
 
    /// 创建路径为keypath的键
    private RegistryKey CreateRegKey(RegistryKey rootkey, string keypath)
    {
        try
        {
            return rootkey.CreateSubKey(keypath);
        }
        catch
        {
            return null;
        }
    }
    /// 删除路径为keypath的子项
    private bool DelRegSubKey(RegistryKey rootkey, string keypath)
    {
        try
        {
            rootkey.DeleteSubKey(keypath);
            return true;
        }
        catch
        {
            return false;
        }
    }
    /// 删除路径为keypath的子项及其附属子项
    private bool DelRegSubKeyTree(RegistryKey rootkey, string keypath)
    {
        try
        {
            rootkey.DeleteSubKeyTree(keypath);
            return true;
        }
        catch
        {
            return false;
        }
    }
    /// 删除路径为keypath下键名为keyname的键值
    private bool DelRegKeyVal(RegistryKey rootkey, string keypath, string keyname)
    {
        try
        {
            RegistryKey key = rootkey.OpenSubKey(keypath, true);
            key.DeleteValue(keyname);
            return true;
        }
        catch
        {
            return false;
        }
    }
}

然后我根据这个类写了一个方法

/// <summary>
/// 修改服务注册表
/// </summary>
/// <param name="serviceName">服务名</param>
/// <param name="key">键</param>
/// <param name="val">值</param>
public void SetRegVal(string serviceName, string key, string val)
{
    GF_RegReadWrite.SetRegVal(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default), @"SYSTEM\CurrentControlSet\services\" + serviceName, key, val);
}

接下来就是调用了

//首先要添加引用:System.ServiceProcess 
//然后导入命名空间:using System.ServiceProcess;
private void Form1_Load(object sender, EventArgs e)
{
    //更多免费源码,外面付费这里免费,没有充值,没有广告https://www.494v.com
    //原文地址https://www.494v.com/forum.php?mod=viewthread&tid=300
    //获得服务集合
    var serviceControllers = ServiceController.GetServices();
    //遍历服务集合,打印服务名和服务状态
    foreach (var service in serviceControllers)
    {
        Console.WriteLine("服务名:{0}\t\t服务状态:{1}", service.ServiceName, service.Status);
    }
    //Start为启动类型
    //4为禁用服务,3为手动启动,2为自动,1为自动延迟
    //2345PicSvc为服务名
    SetRegVal("2345PicSvc", "Start", "4");
 
    //获取指定服务,若服务状态不是Runing就Start该服务
    var server = serviceControllers.FirstOrDefault(service => service.ServiceName == "2345PicSvc");
    if (server != null && server.Status != ServiceControllerStatus.Running)
    {
        //启动服务
        server.Start();
        //停止服务
        server.Stop();
    }
}

记住,需要引用自带dll哦,赶快把那些乱七八糟的服务通过自己的程序实现一键禁用关闭吧

我的博客地址:Wy博客​​​​​​​​​​​​​​

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值