C#启动windows服务的方法浅析

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

C#启动windows服务的方法是什么呢?来让我们开始吧:

C#启动windows服务的由来:我们知道, 在C#代码中启动一个已经存在的windows服务,我们可以用这样的代码来完成:

  1. //ACPI is an example of service name  
  2.  
  3. System.ServiceProcess.ServiceController  
  4.  
  5.  service = new ServiceController("ACPI");   
  6.  
  7. service.Start(); 

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

  1. using Microsoft.Win32;  
  2.  string keyPath = @"SYSTEM\CurrentControlSet\Services\ACPI";   
  3.  
  4. RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, true);  
  5. int val = -1;  
  6. bool bConverted = Int32.TryParse(key.GetValue("Start").  
  7.  
  8. ToString(), out val); if(bConverted){   
  9. if ( val == 4){key.SetValue("Start", 3);  
  10.  }  
  11. }   
  12. System.ServiceProcess.ServiceController   
  13.  
  14. service = new ServiceController("ACPI");   
  15.  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
 

  1. BOOL ChangeServiceConfig(   
  2.  
  3. SC_HANDLE hService,   
  4.  
  5. DWORD dwServiceType,   
  6.  
  7. DWORD dwStartType,   
  8.  
  9. DWORD dwErrorControl,   
  10.  
  11. LPCTSTR lpBinaryPathName,   
  12.  
  13. LPCTSTR lpLoadOrderGroup,   
  14.  
  15. LPDWORD lpdwTagId,   
  16.  
  17. LPCTSTR lpDependencies,   
  18.  
  19. LPCTSTR lpServiceStartName,   
  20.  
  21. LPCTSTR lpPassword,   
  22.  
  23. LPCTSTR lpDisplayName   
  24.  
  25. );  

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

【编辑推荐】

  1. C#Windows服务程序编写浅析
  2. C#Windows服务程序开发软件功能需求
  3. C#Windows服务程序开发之Windows服务浅析
  4. C#Windows服务程序安装浅析
  5. C#Windows服务程序开发的体会
责任编辑:仲衡 来源: 百度空间
相关推荐

2009-08-14 16:41:22

C#启动Windows

2009-08-14 11:00:16

C#创建Windows

2009-08-28 16:01:20

C#启动停止SQL数据

2009-09-11 09:15:06

C# get方法

2009-08-20 16:15:19

C# 匿名方法

2009-09-10 14:52:55

C# get

2009-08-10 17:36:17

C#扩展方法

2009-09-07 09:36:29

C# DisposeDispose方法

2009-08-28 15:52:23

C#利用sharpzi

2009-08-14 17:04:19

Windows后台服务

2009-08-17 17:56:32

C# 枚举

2009-09-10 09:10:17

C# TextBox换

2009-08-14 16:32:50

C#启动Windows

2009-09-07 09:53:01

C# DisposeDispose方法

2009-08-20 10:53:23

C#操作内存

2009-09-18 10:58:31

C#数组操作

2009-08-28 12:19:19

C#静态方法

2009-08-12 17:27:11

C#读取文件

2009-09-08 14:54:40

C# listBox控

2009-09-18 19:09:41

C# COM组件
点赞
收藏

51CTO技术栈公众号