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

可以使用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;
}
}
}

时间: 2024-09-20 00:16:47

通过C#调用cmd来修改服务启动类型_C#教程的相关文章

C#中控制远程计算机的服务的方法_C#教程

在.net中提供了一些类来显示和控制Windows系统上的服务,并可以实现对远程计算机服务服务的访问,如System.ServiceProcess命名空间下面的ServiceController 类,System.Management下面的一些WMI操作的类.虽然用ServiceController可以很方便的实现对服务的控制,而且很直观.简洁和容易理解.但是我认为他的功能同通过WMI来操作服务相比,那可能就有些单一了,并且对多个服务的操作可能就比较麻烦,也无法列出系统中的所有服务的具体数据.这

求助:.net调用java cxf webservice服务日期类型

问题描述 最近做了一个项目需要.net客户端调用javawebservice接口,我们选择了CXF,遇到了一个郁闷的问题,如果定义一个方法,参数是Calendar,.net调用没问题.如果是一个实体类里面有一个属性是Calendar,这个属性的值就是null,很奇怪,求助:哪位兄弟遇到过类似的问题过 解决方案 解决方案二:你转成字符串传更靠谱,收到之后再转回来webservices将所有要传输的东西都转成xml,有些对象不一定那么好转解决方案三:唉,郁闷啊,转字符串的话,存入数据来回折腾太麻烦了

c#调用存储过程实现登录界面详解_C#教程

1,创建存储过程 复制代码 代码如下: create proc Pro_Login(@UserName nvarchar(10),@PassWord nvarchar(10))as select * from [User] UserName=@UserName and PassWord=@PassWord 2,通过类是实现配置数据库字符串连接 复制代码 代码如下: class ConnectionString{public static string conStr = "Data Source=

总结C#动态调用WCF接口的两种方法_C#教程

如何使用 1.第一种方式比较简单,而且也是大家喜欢的,因为不需要任何配置文件就可解决,只需知道服务契约接口和服务地址就可以调用. 2.使用Invoke的方式,但是需要在调用客户端配置WCF,配置后在Invoke类里封装服务契约接口即可. 客户端调用DEMO //第一种方式 string url = "http://localhost:3000/DoubleService.svc"; IDoubleService proxy = WcfInvokeFactory.CreateServic

C#使用DllImport调用非托管的代码的方法_C#教程

找到GetShortPathName的方法签名, DWORD GetShortPathName(LPCTSTR tpszLongPath,TPTSTR lpszShortPath,DWORD cchBuffer): 非托管及托管数据类型对应关系: LPCTSTR         String LPTSTR           StringBuilder DWORD          int DllImport的导入规则: 1.方法名与Win API完全一样.如果在C#中调用时显示完全不同的方法名

解决-JavaService服务启动后总是提示没有其它程序调用而停止

问题描述 JavaService服务启动后总是提示没有其它程序调用而停止 JavaService服务启动后总是提示没有其它程序调用而停止,系统日志显示The LoadLibrary function failed for the following reason: LoadLibrary 不是有效的 Win32 应用程序,请问走了么解决啊?求解决,十万火急.我的邮箱1562819953@qq.com,谢谢!

如何用代码修改 (ICS)服务的启动类型和服务状态。

问题描述 如何用代码修改 (ICS)服务的启动类型和服务状态. 1.如何用代码修改Windows Firewall/Internet Connection Sharing (ICS)服务的启动类型和服务状态. 2.如果用代码选中"Internet 连接共享"下面的"允许其他网络用户通过此计算机的internet连接来连接" 解决方案 参考 Using the Internet Connection Sharing (ICS) and Internet Connect

在Windows平台下修改Oracle实例不随服务启动

一.在Windows平台下修改Oracle实例不随服务启动: 1.修改注册表如下键值实现: HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraDb10g_home1 2.在右边找到找到 ORA_WWL_AUTOSTART项,默认这个值为TRUE,随服务启动而启动,我们将其改为FALSE,再起服务的时候将不再会启动数据库 测试: 启动Oracle服务 C:\>net start OracleServiceWWL OracleServiceWWL 服务正在启动 .

无COM接口Windows服务启动失败的原因及解决方案

将VS创建的Windows服务项目编译生成的程序,通过命令行 "服务.exe -Service"注册为Windows服务后,就可以通过服务管理器进行管理了. 问题 通过服务管理器进行启动的时候,发现服务无法启动,提示错误 由于程序代码是由VS的项目模板生成的,生成后直接编译为Debug版,然后通过命令行进行注册,期间并没有修改过任何代码. 难道是只有Release版本才能通过服务管理器启动吗.于是将Release版注册为服务,通过服务管理器启动,仍然会报同样的错误. 由于服务比较特殊,