通过C#调用cmd来修改服务启动类型

时间:2022-01-02 04:25:46 

可以使用System.ServiceProcess.ServiceController这个类允许连接到正在运行或者已停止的服务、对其进行操作或获取有关它的信息。ServiceController 提供了开始和停止服务的方法(Start, Stop)。
但是这个类并没有提供修改服务启动类型的方法,可以通过C#调用cmd来修改

参考网上的这个方法
//设置服务的启动类型
//sServiceName服务名称
//iStartType要设置的启动类型 2:自动,3:手动,4:禁用
//返回成功状态 true:成功,false:失败


public Boolean SetWindowsServiceStartType(String sServiceName, int iStartType)
{
try
{
System.Diagnostics.ProcessStartInfo objProcessInf = new System.Diagnostics.ProcessStartInfo();
objProcessInf.FileName = "cmd.exe";
objProcessInf.CreateNoWindow = false;
objProcessInf.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
string sStartState = "boot";
switch (iStartType)
{
case 1:
{
sStartState = "system";
break;
}
case 2:
{
sStartState = "auto";
break;
}
case 3:
{
sStartState = "demand";
break;
}
case 4:
{
sStartState = "disabled";
break;
}
default:
{
break;
}
}
objProcessInf.Arguments = "/c sc config " + sServiceName + " start= " + sStartState;
System.Diagnostics.Process.Start(objProcessInf);
return true;
}
catch
{
return false;
}
}



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.ServiceProcess;
using Microsoft.Win32;
namespace Service
{
public class ClassService
{
private string ServiceName; //服务名称
private ServiceController sc;
/// <summary>
/// 服务操作
/// </summary>
/// <param name="ServiceName">服务名称</param>
public ClassService(string ServiceName)
{
this.ServiceName = ServiceName;
this.sc = new ServiceController(ServiceName);
}
/// <summary>
/// 启动服务
/// </summary>
/// <returns></returns>
public bool StartService()
{
try
{
if (sc.Status != ServiceControllerStatus.Running)
sc.Start();
else
return false;
}
catch (Exception)
{
return false;
}
return true;
}
/// <summary>
/// 停止服务
/// </summary>
/// <returns></returns>
public bool StopService()
{
try
{
if (sc.Status != ServiceControllerStatus.Stopped)
sc.Stop();
else
return false;
}
catch (Exception)
{
return false;
}
return true;
}
/// <summary>
/// 重启服务
/// </summary>
/// <returns></returns>
public bool RestartService()
{
if (StopService())
{
if (StartService())
return true;
else
return false;
}
else
return false;
}
/// <summary>
/// 获取服务启动类型
/// </summary>
/// <returns>2:自动 3:手动 4:禁用 0:获取失败</returns>
public int GetServiceStartMode()
{
int Mode = 0;
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\" + ServiceName);
Mode = Convert.ToInt32(key.GetValue("Start"));
key.Close();
}
catch (Exception)
{
return 0;
}
return Mode;
}
/// <summary>
/// 设置服务启动类型
/// </summary>
/// <param name="Mode">2:自动 3:手动 4:禁用</param>
/// <returns></returns>
public bool SetServiceStartMode(int Mode)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\" + ServiceName, true);
key.SetValue("Start", Mode);
key.Close();
}
catch (Exception)
{
return false;
}
return true;
}
}
}
标签:调用cmd,系统服务
0
投稿

猜你喜欢

  • java二维码生成的方法

    2022-08-02 22:07:28
  • 一文读懂Spring Bean的生命周期

    2022-11-01 04:01:20
  • C#实现窗口之间的传值

    2022-05-26 08:28:14
  • Java中JFrame实现无边框无标题方法

    2021-11-25 20:35:54
  • Java实现年兽大作战游戏详解

    2023-11-08 04:28:05
  • Android权限询问的实例详解

    2022-10-03 21:28:51
  • Java开发岗位面试被问到反射怎么办

    2023-01-07 00:09:12
  • Mybatis如何实现InsertOrUpdate功能

    2022-10-11 10:26:58
  • Android自定义Camera实现拍照功能

    2021-09-22 09:18:58
  • centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)

    2023-05-13 05:02:40
  • 如何将javaweb项目部署到linux下

    2023-11-11 11:45:11
  • Java日期操作类常见用法示例

    2021-06-17 01:12:59
  • WinForm实现最小化到系统托盘方法实例详解

    2023-10-05 05:53:30
  • 深入理解C#窗体关闭事件

    2023-06-01 14:38:56
  • java实现单机版五子棋

    2022-12-20 20:15:07
  • Android中GridView插件的使用方法

    2021-07-26 16:46:28
  • 解决logback-classic 使用testCompile的打包问题

    2021-07-01 08:16:50
  • 利用spring aop实现动态代理

    2022-02-02 16:50:25
  • Android贝塞尔曲线初步学习第二课 仿QQ未读消息气泡拖拽黏连效果

    2023-08-18 10:18:20
  • SpringBoot入坑笔记之spring-boot-starter-web 配置文件的使用

    2021-12-15 13:11:46
  • asp之家 软件编程 m.aspxhome.com