将应用程序注册成后台服务程序

将任何应用程序注册成后台服务程序,即:系统启动后该程序可以自动启动,并且在前台不要出现运行窗口。
解决办法:需要使用Windows提供的两个工具instsrv.exe和srvany.exe。(Windows 2003资源工具包带有)
  • instsrv:把win32程序变成系统服务。
  • srvany:将一个应用程序注册为一个服务。即注册一个系统服务,来启动要运行的应用程序。
基本用法:
  • instsrv  [服务名]  [应用程序绝对路径]  (增加服务)
  • instsrv  [服务名]  REMOVE  (删除服务)
  • instsrv  [服务名]  [srvany的绝对路径]
一、应用程序具有服务功能(能响应服务控制台的查询请求)
使用instsrv.exe,指令格式:instsrv [服务名] [应用程序路径]
执行完成后,在注册表项“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\”中自动增加项[服务名],并在其下成功添加各个键值:
“DisplayName”   =服务显示名     (字符串值)
“Description”   =服务描述       (字符串值)
“ImagePath”     =应用程序路径   (可扩充字符串值)
“ObjectName”    =”LocalSystem”  (字符串值)
“Type”          =10(16进制)     (dword值)
“Start”         =2(16进制)      (dword值)
“ErrorControl”  =1(16进制)      (dword值)
如果不使用instsrv.exe,同样可以在注册表中手工添加实现:在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\”下新建一个项,项名为要显示的服务名,并在其下新建以上各个键,填入键值。
这样,一个服务就增加成功了,运行services.msc在服务管理器中可以看到,重启电脑就会自动启动服务。
二、应用程序不具有服务功能(不能响应服务控制台的查询请求)
并不是所有程序都适合做系统服务,即便注册成系统服务后也是无法启动,这时就需要用到srvany.exe。
具体步骤如下:
  1. 注册服务:  path\instsrv  [服务名]  path\srvany.exe (同样第一种情况,把[应用程序路径]换为[srvany路径]。)
  2. 运行regedit打开注册表,进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[服务名]
  3. 新建一个项,项名为Parameters,在项Parameters下新建如下建值:
  4. 右键-新建-字符串值Application,值数据填入[应用程序绝对路径],如:D:\RuijieSupport\MentoHUST\MentoHUST.exe
  5. 右键-新建-字符串值AppDirectory,值数据填入[应用程序工作目录],如:  D:\RuijieSupport\MentoHUST\
  6. 运行services.msc打开服务管理,找到刚添加的服务,在属性-登录中,勾选“允许服务与桌面交互”。
  7. 启动服务。
说明:
  1. 执行instsrv命令如果出现出错提示:- The fully qualified path to the .EXE must be given。则说明需要写完整的路径,并最好用引号包含。如:C:\Program Files\Windows Resource Kits\Tools> instsrv MentoHUST “C:\Program Files\Windows Resource Kits\Tools\srvany.exe”
  2. 在Parameters里还可以添加很多键值:
    AppDirectory  工作目录
    AppParameters  你的应用程序的参数。
    AppEnvironment  运行环境变量。
三、以上方法同样可以采用inf文件实现。
inf文件格式:
增加一个服务:
[Version]
Signature=”$WINDOWS NT$”
[DefaultInstall.Services]
AddService=MentoHUST,,My_AddService_Name
[My_AddService_Name]
DisplayName=MentoHUST Replace Ruijie
Description=锐捷替代
ServiceType=0×10
StartType=2
ErrorControl=0
ServiceBinary=%11%\MentoHUST.exe
删除一个服务:
[Version]
Signature=”$WINDOWS NT$”
[DefaultInstall.Services]
DelService=MentoHUST
增加服务的inf文件创建后,保存,并执行命令:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 path\inf文件名
执行完成后,同样会看到:在注册表中看到新增的服务项MentoHUST和键值,在服务管理器会看到新增的服务MentoHUST。
遇到不具有服务功能的应用程序,还是要打开注册表,接着上述操作,在创建的服务项下新建项Parameters,并添加键值。
说明:
  1. ServiceType 服务类型:0×10为独立进程服务,0×20为共享进程服务(比如svchost);
  2. StartType 启动类型:0 系统引导时加载,1 OS初始化时加载,2 由SCM(服务控制管理器)自动启动,3 手动启动,4 禁用。(注意,0和1只能用于驱动程序)
  3. ErrorControl 错误控制:0 忽略,1 继续并警告,2 切换到LastKnownGood的设置,3 蓝屏。
  4. ServiceBinary 服务程序位置:%11%表示system32目录,%10%表示系统目录(WINNT或Windows),%12%为驱动目录system32\drivers。也可以不用变量,直接使用全路径。
  5. 服务名MentoHUST后面有两个逗号,因为中间省略了一个不常用的参数flags。
  6. Description、ServiceType、StartType、ErrorControl四项是必须要有的,还有LoadOrderGroup、Dependencies等就不做详述了。
使用inf文件的优势:
  1. 和用SC等工具一样,inf文件的效果是即时起效的,而导入reg后必须重启才有效。
  2. 导出一个系统自带服务的注册表项,如果数据类型是REG_EXPAND_SZ,会看到一堆16进制代码,可读性很差。手动导入注册表以增加服务时,这样定义ImagePath显然很不方便,而用REG_SZ代替又会有些问题,比如不能用环境变量。用inf文件完全没有这个问题,ServiceBinary(即ImagePath)自动成为REG_EXPAND_SZ。
  3. inf文件会自动为服务的注册表项添加一个Security子键,使它看起来更像系统自带的服务。
  4. AddService和DelService以及AddReg、DelReg可以同时且重复使用。即可以同时增加和删除多个服务和注册表项。
四、通过修改注册表来添加服务: 
在注册表编辑器,展开分支"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" ,在右侧窗格中显示的就是本机安装的服务项。如果要新建服务,只须点击"编辑→新建→项" ,然后为此项命名,如"test";然后右击该项,选择"新建→字符串值"或"新建→Dword值"即可。添加一个服务项目具体需要添加的键值如下: 
"DisplayName",字符串值,对应服务名称; 
"Description",字符串值,对应服务描述; 
"ImagePath",字符串值,对应该服务程序所在的路径;
"ObjectName",字符串值,值为"LocalSystem",表示本地登录;
"ErrorControl",Dword值,值为"1"; 
"Start",Dword值,值为2表示自动运行,值为3表示手动运行,值为4表示禁止; 
"Type",Dword值,应用程序对应10,其它对应20。 
  另外,还要在"test"项下新建一个"Enum"项。如果有些必须通过srvany来加载的还必须添加另外的Parameters子项在该项中提供详细的要加为服务的程序所在的路径。而上面的那个路径就需要指到srvany所在的路径。 
 
附:Windows 2003资源工具包 下载地址
Windows Server 2003 Resource Kit Tools
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en

你可能感兴趣的:(职场,系统服务,注册,后台,休闲)