◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
将普通exe程序设置为Windows系统服务启动
Win服务器系统测试,自动启动运行正常,不管是手动、自动、强制重启,均能正常启动。脚本内容:@echo off::设置服务名称set service_name=smtpsvr::设置服务描述set service_description=1st smtp server 服务::设...
总字数:6480Win服务器系统测试,自动启动运行正常,不管是手动、自动、强制重启,均能正常启动。
@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, 5,518 hits)
srvany.rar(包含Instsrv.exe、Srvany.exe) 链接:http://pan.baidu.com/s/1o8lkfFG 密码:zy3d
win2003只要Srvany.exe就行了。SC是XP/2003自带的,SC CREATE命令可以创建服务(instsrv.exe的功能)
***********************************************
首先这个程序必须是能够持续运行的程序,如果是那种一运行很快就结束的程序,那么使用srvany.exe就没有效果了,因为srvany.exe启动了这个程序,而这个程序却很快就运行结束自动退出了,那么你在进程中将看不到你所希望运行的程序,只看到srvany.exe进程,因为它已经运行结束了,对于持续性程序,就是你不点关闭、不中止进程程序就不会退出的那种,在srvany.exe启动这类程序时,进程列表中将有你要启动的程序名和srvany.exe这两项,这时如果你停止服务,这两个进程将自动结束。
我们知道系统自带的notepad.exe和nslookup.exe都是那种持续性程序,你不点关闭它们将不会退出,这两个程序一个是窗体程序、一个是控制台程序,将instsrv.exe和srvany.exe拷贝到SYSTEM32文件夹中,下面我用这两个程序做了实验:
1.notepad.exe
instsrv sample1 C:\Windows\System32\srvany.exe
将下面导入注册表:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sample1\Parameters]
"Application"="C:\\WINDOWS\\SYSTEM32\\notepad.exe"
"AppDirectory"="C:\\WINDOWS\\SYSTEM32\\"
"AppParameters"=""
然后启动服务sample1,观察任务管理器进程列表,出现srvany.exe和notepad.exe两个SYSTEM账户运行的进程,停止sample1服务后,两个进程消失,证明窗体类程序可以正常挂到srvany.exe下作为服务运行。
2.nslookup.exe
instsrv sample2 C:\Windows\System32\srvany.exe
将下面导入注册表:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sample2\Parameters]
"Application"="C:\\WINDOWS\\SYSTEM32\\nslookup.exe"
"AppDirectory"="C:\\WINDOWS\\SYSTEM32\\"
"AppParameters"=""
同上操作,证明控制台程序也是可以被srvany.exe作为服务启动的。
对于持续性程序,可以通过 输入等待getchar()、死循环、互斥、消息循环等方式实现。
***********************************************
srvany.exe是什么?
srvany.exe是Microsoft Windows ResourceKits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行。也就是说srvany只是其注册程序的服务外壳,这个特性对于我们来说非常实用,我们可以通过它让我们的程序以SYSTEM账户启动,或者实现随机器启动而自启动,也可以隐藏不必要的窗口,比如说控制台窗口等等。
如何获取?
你可以通过下载并安装Microsoft Windows ResourceKits,也可以在此下载:http://download.csdn.net/detail/generalhking/5381805
如何使用?
将srvany.exe和instsrv.exe拷贝到C:\Windows\System32\后,我们可以通过下面的命令行进行srvany.exe的服务安装:
instsrv ServiceNameC:\Windows\System32\srvany.exe
ServiceName即你自己定义的服务名称,可以是要作为系统服务启动的应用程序的名称。
安装完毕后,我们需要对srvany.exe进行配置,以便于能够加载我们指定的程序,配置的方法是,开始 - 运行 -regedit,打开注册表,定位到下面的路径。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName
同样的ServiceName是你刚才安装服务时自定义的服务名称。
如果该服务名下没有Parameters项目,则对服务名称项目右击新建项,名称为Parameters,然后定位到Parameters项,新建以下几个字符串值。
名称 Application 值为你要作为服务运行的程序地址。
名称 AppDirectory 值为你要作为服务运行的程序所在文件夹路径。
名称 AppParameters 值为你要作为服务运行的程序启动所需要的参数。
比如这里是个配置实例,我们这里配置的服务名称是NGINX,其余是nginx的安装配置情况。
当然还有一个比较简单的做法,那就是将下面的文本保存为*.reg文件,然后双击导入注册表。
123456 | Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\服务名称\Parameters] "Application"="值为你要作为服务运行的程序地址""AppDirectory"="值为你要作为服务运行的程序所在文件夹路径""AppParameters"="值为你要作为服务运行的程序启动所需要的参数" |
什么是服务程序?
服务程序是指遵循微软的服务程序开发规范开发出来的特殊程序,这类程序和普通程序相比最大的特点是可以被系统作为服务启动,服务程序和普通程序都可以是自己开发的程序,普通程序不能直接作为服务程序启动,否则服务启动会报错,所以srvany.exe就是为解决这个问题而诞生的,srvany.exe本身是作为服务程序而开发的,其是遵循服务程序开发规范的,所以可以被系统作为服务程序启动,然后srvany.exe会根据注册表的配置参数启动你所设定的普通程序,所以进程列表会有两个一个是srvany.exe另一个是你的普通EXE程序,注意它们都是以SYSTEM账户启动的,如果srvany.exe服务被停止,那么相应的普通程序也会被srvany.exe停止,这样就将普通程序模拟出服务程序的功能了。
一般情况下不建议将有窗体的程序作为服务程序运行,如果服务程序启动时,想隐藏程序窗体或者控制台窗口,可使用下述方法:
开始,运行,输入services.msc,打开服务管理器,找到你设置的那个服务项,右击属性,切换到“登录”选项卡,然后去勾选“允许服务与桌面交互”。
***************************************************************************
实例子参考:
方法:
生成 [增加***随服务启动.bat] 的批处理文件,内容(单独染色的表示可修改或必须修改):
::上面的路径【set prog_path=***】必须正确,格式一样,instsrv1.exe、srvany1.exe 根据需要启动的数量增加
::一个就默认instsrv.exe、srvany.exe,两个就加1:instsrv1.exe、srvany1.exe,三个就加2:instsrv2.exe、srvany2.exe,递增..
另外三个文件的下载地址: 链接:https://pan.baidu.com/s/1QJ4kbk1WPCD5MkPtPmrg0g 密码:0t72
instsrv.exe
srvany.exe
sc.exe,这个是否需要有待验证
整个连同sc.exe就四个文件:
FTPServer.reg ---bat生成出来的
ftpserv增加系统服务.bat 必须的bat文件
instsrv1.exe 必须增加的系统文件
srvany1.exe 必须增加的系统文件
2KK8.com
2KK8.com
这里的内容可以随意更改,在后台-主题配置中设置。