• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这不是一篇关于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.








鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#格式输出发布时间:2022-07-13
下一篇:
C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十九)向Silverlight移 ...发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap