http://cpiz.net/blog/2008/06/%E4%B8%80%E6%87%92%E5%88%B0%E5%BA%95%E8%BD%BB%E6%9D%BE%E6%B3%A8%E5%86%8Cexe%E7%A8%8B%E5%BA%8F%E4%B8%BAwindows%E7%B3%BB%E7%BB%9F%E6%9C%8D%E5%8A%A1/
一懒到底——轻松注册Exe程序为Windows系统服务
前几天搞那个邮件接口的程序,用到一个叫1st smtp server的程序来做smtp服务器,但这个东西是不支持以服务方式运行的,又不能像java一样使用java service wrapper。Google了几个小时,看到有介绍用sc.exe注册系统服务的文章,但压根就不能用,新添加的服务怎么也启不来,有说要改注册表的,又说了半天也说不清楚。后来发动鸡肉搜索引擎,帮我找到篇比较靠谱的文章《把EXE文件注册成服务的方法》,介绍了使用Windows 2000 Resource Kit Tools中两个小程序Instsrv.exe和Srvany.exe可以达到目的,虽然找这两个程序又花了很久,但最终还是搞定了。
该文提到的步骤比较繁琐,原理大概是以Srvany.exe作为一个shell来启动其它的exe程序作为服务,Instsrv.exe是配合注册服务用的,作为服务的程序路径要记在注册表里。我在实施的时候顺便结合了一下新学习到的sc.exe,为该服务更改了启动方式,并修改描述内容。
为了方便和我有同样想法的人,干脆写了个批处理脚本,一步实现停止->删除->注册->启动的功能,包括生成注册表文件并导入。
- 脚本内容如下:
@echo off
::设置服务名称
set service_name=smtpsvr
::设置服务描述
set service_description=1st smtp server 服务
::设置服务程序路径
set prog_path=D:\\Green Programs\\fstsmtp\\smtpserver.exe
::设置服务的启动方式 auto:自动 demand:手动 disabled:禁用
set strt=auto
echo EasyService 一键服务
echo ===========================================================
::pause
::======================以下部分勿随意修改==========================
set s32=%windir%\system32
set reg_file=EasyService.reg
net stop %service_name% 2>nul
copy instsrv.exe %s32%
copy srvany.exe %s32%
%s32%\instsrv.exe %service_name% remove 2>nul
%s32%\instsrv.exe %service_name% %s32%\srvany.exe >nul
::设置服务的启动方式 auto:自动 demand:手动 disabled:禁用
sc config %service_name% start= %strt%
sc description %service_name% "%service_description%"
echo 生成注册表文件...
echo Windows Registry Editor Version 5.00 > %reg_file%
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\%service_name%\Parameters] >> %reg_file%
echo "Application"="%prog_path%" >> %reg_file%
echo 导入注册表文件...
%reg_file%
net start %service_name%
echo ===========================完成============================
pause
- 使用方法:
修改脚本中service_name、service_description、prog_path、strt这4个变量的内容,分别设置为服务名、功能描述、程序路径、启动方式,保存后运行脚本,弹出是否导入注册表,选是,大功告成,已在winxp及win2k下测试通过。
- 下载:
一键服务 (32.2 KiB, 3,538 hits)