使用winsw让任何Windows程序都能运行为服务
qingheluo2020-12-02清河洛500
很多时候我们需要在windows下开机运行某些服务程序:我们可以使用自带的服务功能,但是只有程序的开发者在写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。我们还可以使用bat脚本,把脚本添加开机启动,缺点是开机后会显示一个命令行窗口且这个窗口不能关闭。而winsw就是一个可以将Windows上的任何一个程序注册为服务的开源软件。软件下载地址:https://github.com/winsw/winsw下载对应.NET版本的程序,然后创建一个对应的xml格式的配置文件,使用命令行进行安装:安装服务winsw install [<path-to-config>...
很多时候我们需要在windows下开机运行某些服务程序:我们可以使用自带的服务功能,但是只有程序的开发者在写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。我们还可以使用bat脚本,把脚本添加开机启动,缺点是开机后会显示一个命令行窗口且这个窗口不能关闭。
而winsw就是一个可以将Windows上的任何一个程序注册为服务的开源软件。软件下载地址:https://github.com/winsw/winsw下载对应.NET版本的程序,然后创建一个对应的xml格式的配置文件,使用命令行进行安装:
安装服务
winsw install [<path-to-config>] [--no-elevate] [--user|--username <username>] [--pass|--password <password>] path-to-config:配置文件的路径。如未指定,会在可执行目录中搜索具有相同文件名的.xml文件 --no-elevate:不会自动触发UAC提示 --user|--username <username>:指定服务帐户的用户名 --pass|--password <password>:指定服务帐户的密码卸载服务
winsw uninstall [<path-to-config>] [--no-elevate]启动服务
winsw start [<path-to-config>] [--no-elevate]停止服务
winsw stop [<path-to-config>] [--no-elevate] [--no-wait] [--force] --no-wait:不等待服务实际停止 --force:即使已启动相关服务也停止该服务停止,然后启动服务
winsw restart [<path-to-config>] [--no-elevate] [--force]检查服务状态
winsw status [<path-to-config>]测试服务
winsw test [<path-to-config>] [--no-elevate] [--timeout <timeout>] [--no-break] 检查服务是否可以在不安装的情况下启动然后停止。 --timeout <timeout>:指定停止服务之前要等待的秒数。如果未指定或指定为-1,则WinSW会无限期地等待按键。 --no-break:忽略击键。如果指定,WinSW将等待Ctrl + C。刷新服务属性,而无需重新安装
winsw refresh [<path-to-config>] [--no-elevate]自定义包装可执行文件
winsw customize -o|--output <output> --manufacturer <manufacturer> -o|--output <output>:指定输出文件的路径。 --manufacturer <manufacturer>:指定自定义可执行文件的制造商名称。绘制与服务关联的流程树
winsw dev ps [<path-to-config>] [-a|--all] -a|--all:绘制与所有服务关联的流程树。如果服务已停止响应,则终止该服务。
winsw dev kill [<path-to-config>] [--no-elevate]列出由当前可执行文件管理的服务
winsw dev list
NSSM
NSSM是一个轻量级的工具,专门用于在Windows上运行用户程序作为服务
相比于winsw,NSSM无需额外配置文件,通过GUI或命令行创建和管理服务,操作更加简单
NSSM开源网址:https://github.com/kirillkovalenko/nssm/
NSSM官方网址:https://nssm.cc/
在官网上点击左侧第三个菜单"All builds",点击下载最新版本,在"2017-04-26"时间之前的版本不支持WIN10等更新的系统
NSSM是一个单文件程序,解压缩下载的文件在解压缩的目录中找到win64目录中的nssm.exe文件复制到已经添加至环境变量的目录中
NSSM命令格式:nssm command flags
服务安装: nssm install [serverName [AppPath [startArgs...]]] 如果提供了运行程序,那么不会弹出GUI界面,否则会弹出一个用于详细设置的GUI界面 服务编辑: GUI界面 :nssm edit serverName 命令行 :nssm set serverName option value 常用option有 Application 运行文件 AppParameters 运行参数 AppDirectory 工作目录 Start 启动模式,可选 SERVICE_AUTO_START 自动启动 SERVICE_DELAYED_AUTO_START 延迟启动 SERVICE_DEMAND_START 手动 SERVICE_DISABLED 禁用 ObjectName 指定运行服务的账户和密码 默认情况下NSSM以LocalSystem账户运行服务 以<name> <pwd>格式 其中name前要加域,本地使用".\"代替,如".\Administrator" AppExit Default Restart 固定用法,设置应用崩溃时自动重启 AppRestartDelay 应用崩溃时自动重启的延迟,单位毫秒 AppStdout 标准输出写入文件 AppStderr 错误输出写入文件 AppRotateFiles 是否启用日志分割,为1表示启用 AppRotateOnline 是否启用在线分割,即不关闭或重启服务就完成日志分割 AppRotateSeconds 每隔指定秒数进行日志分割 AppRotateBytes 每当日志文件超过指定大小(字节)进行日志分割 DependOnService 该程序依赖的服务名,在依赖服务启动后才启动 配置查看: nssm get serverName option 查看某个配置项的值 当option错误时会打印出所有支持的option项 配置重置: nssm reset serverName option 重置某个配置项为默认值 服务备份: nssm dump serverName 打印达成指定服务当前状态要执行的命令 服务启动: nssm start serverName 服务停止: nssm stop serverName 服务重启: nssm restart serverName 服务状态: nssm status serverName 服务删除: nssm remove [serverName [confirm]] 提供了confirm参数会直接删除而不弹出GUI提示