使用C#启动服务类型为Disabled的windows服务

这不是一篇关于windows服务和注册表编辑的全面解释文章。

-------------------------------------------------------------

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

//ACPI is an example of service name

System.ServiceProcess.ServiceController service = new ServiceController("ACPI");

service.Start();
  

但是这样有一个问题, 如果服务类型是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();






总结一下修改服务的启动方式有两种方法:  

  1.   修改注册表  

  windows 服务的注册表地址为 : [\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName]  

  其中子键Start代表了启动类型. 类如"Start"=dword:00000002  

  其中2为Automatic,   3为Manul, 4为Disabled

 

  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  

  );  



这篇文章使用了方法1.







转载于:https://www.cnblogs.com/sun/archive/2008/08/19/1270675.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值