//注册表操作
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)
{
    //获得服务集合
    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();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
上次更新: 6/15/2024, 10:42:50 AM