C#启动windows服务方法的相关问题分析_C#教程

C#启动windows服务的方法都是什么呢?C#启动服务类型为Disabled的windows服务会遇到什么样的问题呢?那么本文就向你介绍C#启动windows服务的方法的相关内容。

C#启动windows服务的方法是什么呢?来让我们开始吧:
C#启动windows服务的由来:我们知道, 在C#代码中启动一个已经存在的windows服务,我们可以用这样的代码来完成:

复制代码 代码如下:

//ACPI is an example of service name
System.ServiceProcess.ServiceController
service = new ServiceController("ACPI");
service.Start();

C#启动windows服务遇到的问题, 如果服务类型是Disabled, 那么start方法就会引发异常。 一般的做法是先修改服务的启动类型, 然后启动该服务:

复制代码 代码如下:

using Microsoft.Win32;
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){
if ( val == 4){key.SetValue("Start", 3);
}
}
System.ServiceProcess.ServiceController
service = new ServiceController("ACPI");
service.Start();

总结一下修改服务的启动方式有两种方法:
C#启动windows服务1. 修改注册表
windows 服务的注册表地址为 :
[\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName]
其中子键Start代表了启动类型. 类如"Start"=dword:00000002
其中2为Automatic, 3为Manul, 4为Disabled
C#启动windows服务2.用API

复制代码 代码如下:

BOOL ChangeServiceConfig(
SC_HANDLE hService,
DWORD dwServiceType,
DWORD dwStartType,
DWORD dwErrorControl,
LPCTSTR lpBinaryPathName,
LPCTSTR lpLoadOrderGroup,
LPDWORD lpdwTagId,
LPCTSTR lpDependencies,
LPCTSTR lpServiceStartName,
LPCTSTR lpPassword,
LPCTSTR lpDisplayName
);

C#启动windows服务的方法浅析就向你介绍到这里,希望对你学习和了解C#启动windows服务有所帮助。

时间: 2025-01-27 04:25:29

C#启动windows服务方法的相关问题分析_C#教程的相关文章

用.NET创建Windows服务的方法第1/2页_C#教程

译者说明:我是通过翻译来学习C#的,文中涉及到的有Visual Studio.NET有关操作,我都根据中文版的VS.NET显示信息来处理的,可以让大家不致有误解. 作者:Mark Strawmyer 我们将研究如何创建一个作为Windows服务的应用程序.内容包含什么是Windows服务,如何创建.安装和调试它们.会用到System.ServiceProcess.ServiceBase命名空间的类. 什么是Windows服务? Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器

启动windows服务项-欢迎戳入,打包开启windows的相关服务

问题描述 欢迎戳入,打包开启windows的相关服务 大家肯定安装过一些比较高端的软件,而这些软件一般需要绑定很多的服务项,如果设置为自动开启的话,有时效果不尽人意:要是禁止的话,呵呵...所以就只好手动开启了,但是一般服务项比较多的时候,手动开启又比较费时,所以还请高手赐教,如何打包开启或关闭软件相关的服务项,依稀记得曾经用过的ORACLE有人封装为一个exe(貌似) 膜拜... 解决方案 问题发出来,帖子冷了,自己也淡忘了,今天收拾旧账,赶紧来打扫一下 windows开启系统服务的命令为ne

C# XML序列化方法及常用特性总结分析_C#教程

本文实例总结了C# XML序列化方法及常用特性.分享给大家供大家参考,具体如下: C#对象XML序列化(一):序列化方法和常用特性 .Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和从XML中反序列化为对象.Serializer的使用比较直观,需要多注意的是XML序列化相关的Attribute,怎么把这些attribute应用到我们的对象,以及对象公共属性上面去,生成满足预期格式的XML. 这里列出了最

C#简单访问SQLite数据库的方法(安装,连接,查询等)_C#教程

本文实例讲述了C#简单访问SQLite数据库的方法.分享给大家供大家参考,具体如下: 下载最新版SQLite(http://www.sqlite.org/download.html),其他版本也可以,这里使用的版本是sqlite-3_6_6_1 a.解压后copy c:\sqlite-3_6_6_1 b.进入cmd模式,进入sqlite-3_6_6_1目录,执行sqlite3 mytest.db c. create table test (seq int,desc varchar(8)); in

C#计算汽车行驶方向的方法分析_C#教程

本文实例分析了C#计算汽车行驶方向的方法.分享给大家供大家参考,具体如下: 1.  场景:已知汽车行驶过程中的2个GPS坐标点A(n1,e1),B(e),计算它行驶的方向. 2. 分析:如上图所示,知道了两个点A.B,可以假设一个C点,让三个点构成一个直角三角形.现在可以知道,A,B,C三点的GPS坐标就很容易求出三个角的对边长度a,b,c.根据余弦定下CosB=(a2+c2-b2)/2ac,就可以求出CosB的值. 3.C#实现代码. /// <summary> ///计算两点GPS坐标的距

C# 判断字符为空的6种方法的效率实测对比_C#教程

C#中提供了相当丰富的方法或属性来判断一个字符是否为空,常用的方法有以下6种 1. strTest== "" 2. strTest.Equals("") 3. strTest== string.Empty 4. strTest.Equals(string.Empty) 5. strTest.Length == 0 6. string.IsNullOrEmpty(strTest) 为了对以上6种方法的效率,有个直观的感受,我特意编写了以下的测试代码: using Sy

c# StringBuilder.Replace 方法 (Char, Char, Int32, Int32)_C#教程

将此实例的子字符串中所有指定字符的匹配项替换为其他指定字符.  命名空间:System.Text  程序集:mscorlib(在 mscorlib.dll 中)  语法  C#  public StringBuilder Replace (  char oldChar,  char newChar,  int startIndex,  int count  )  参数  oldChar  要替换的字符.  newChar  替换 oldChar 的字符.  startIndex  此实例中子字符

C#中Byte转换相关的函数_C#教程

 1.将一个对象转换为byte对象 public static byte GetByte(object o) { byte retInt = 0; if (o != null) { byte tmp; if (byte.TryParse(o.ToString().Trim(), out tmp)) { retInt = tmp; } } return retInt; } 2.将一个十六进制字符串转换为byte对象,字符串以0x开头 public static byte GetByteFormHe

C# TextBox 扩展方法数据验证详细说明_C#教程

      查看公司项目代码时,存在这样一个问题:winform界面上有很多信息填写,提交后台服务器更新,但数据的合法验证及值的转换却不太敢恭维,一堆的if判断和转换,便想着是否能扩展个方法出来,琢磨出个思路,记录下来与大家共同探讨,有不对的地方还请大家指正.       设计思路: 1. 由于大部分从TextBox控件中获取数据值,可以扩展个泛型方法出来,直接根据转换后的数据类型获得值,类似这样, var value = this.txtSample.GetValue<int>(); 2.