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







    作者:Jeffrey Sun
    出处:http://sun.cnblogs.com/
    本文以“现状”提供且没有任何担保,同时也没有授予任何权利。本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    十二、redis常用的运维命令及注意参数
    十一,redis的主从集群
    十、redis的持久化配置
    九、Redis的消息发布和订阅
    八、Redis 中的事务
    apache、nginx、iis日志记录的各个字段内容与含义
    Pikachu-RCE
    Pikachu-SQL-Inject(SQL注入漏洞)
    Pikachu-CSRF(跨站请求伪造)
    Pikachu-XSS(跨站脚本)漏洞
  • 原文地址:https://www.cnblogs.com/sun/p/1270675.html
Copyright © 2020-2023  润新知