基本说明

Windows系统支持将可执行程序注册成系统服务,以便在系统启动时自动运行。但是,对于一些第三方程序,可能无法直接使用系统提供的注册工具。因此,需要编写脚本或使用其他方法来实现程序的注册。

在Windows系统中,可以使用sc.exe命令来注册服务。具体用法可以参考Windows官方文档或者使用sc.exe /?命令获取帮助信息。

不过,可执行程序想在Windows系统中注册成服务,必须是一个Service Provider(需要包含符合Windows API的接口)。也就是说,程序必须提供一个服务提供者,以便Windows系统可以调用该提供者来启动和停止服务。

因此,本文提供了一个基于srvany-ng的通用解决方案。

编写服务注册脚本

示例脚本regist_service.bat如下:

@echo off
cd /d %~dp0
set serviceName=DemoService
set appName=demo.exe
sc delete %serviceName%
sc create %serviceName% binPath= %cd%\srvany-ng.exe start= auto
sc description %serviceName% "demo service"
@echo on
echo "register service success"
reg import regist.reg
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\%serviceName%\Parameters" /v "Application" /t "REG_SZ" /d "%cd%\%appName%" /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\%serviceName%\Parameters" /v "AppDirectory" /t "REG_SZ" /d "%cd%" /f
pause

regist.reg内容如下:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DemoService\Parameters]

regist_service.batregist.reg以及srvany-ng.exe放在demo.exe文件同目录下执行regist_service.bat即可。

PS:脚本需要管理员权限才能执行,该方法适用于Windows XP及以上版本,如果是XPsrvany-ng记得使用32位版本。