使用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.







posted @ 2008-08-19 10:08  Jeffrey Sun  阅读(3894)  评论(2编辑  收藏  举报