中文版 | English

网站首页 | 个人作品 | 博客 | 给我留言 | 经典分享 | 友情链接 | 黑白人生


将程序注册为服务

把程序注册为服务的方法:
首先建立一个inf文件如yuhu.inf放在C盘根目录下,其内容如下
[Version] 
Signature="$WINDOWS NT$" 
[DefaultInstall.Services] 
AddService=yuhu,,My_AddService_Name 
[My_AddService_Name] 
DisplayName=yubo's server 
Description=余波的服务程序。 
ServiceType=0x10 
StartType=2 
ErrorControl=0 
ServiceBinary=%11%\yuhu.exe 
然后运行如下命令rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\yuhu.inf
看看你的系统看到什么了

几点说明: 

  1,最后四项分别是 
  服务类型:0x10为独立进程服务,0x20为共享进程服务(比如svchost); 
  启动类型:0 系统引导时加载,1 OS初始化时加载,2 由SCM(服务控制管理器)自动启动,3 手动启动,4 禁用。(注意,0和1只能用于驱动程序) 
  错误控制:0 忽略,1 继续并警告,2 切换到LastKnownGood的设置,3 蓝屏。 
  服务程序位置:%11%表示system32目录,%10%表示系统目录(WINNT或Windows),%12%为驱动目录system32drivers。其他取值参见DDK。你也可以不用变量,直接使用全路径。 
  这四项是必须要有的。 
  2,除例子中的六个项目,还有LoadOrderGroup、Dependencies等。不常用所以不介绍了。 
  3,yuhu后面有两个逗号,因为中间省略了一个不常用的参数flags。 
 删除一个服务: 

[Version] 
Signature="$WINDOWS NT$" 
[DefaultInstall.Services] 
DelService=yuhu 
  当然,你也可以通过导入注册表达到目的。但inf自有其优势。 
  1,导出一个系统自带服务的注册表项,你会发现其执行路径是这样的: 
"ImagePath"=hex(2):00,00,~~~ 之类
      可读性太差。其实它就是系统路径下的该执行文件,但数据类型是REG_EXPAND_SZ。当手动导入注册表以增加服务时,这样定义ImagePath显然很不方便。而使用inf文件就完全没有这个问题,ServiceBinary(即ImagePath)自动成为REG_EXPAND_SZ。 
  2,最关键的是,和用SC等工具一样,inf文件的效果是即时起效的,而导入reg后必须重启才有效。 
  3,inf文件会自动为服务的注册表项添加一个Security子键,使它看起来更像系统自带的服务。 
  另外,AddService和DelService以及AddReg、DelReg可以同时且重复使用。即可以同时增加和删除多个服务和注册表项。 

上一篇: C++一些体会(补充当中)
下一篇: 自己封装了一个GHOST系统