WinSW设置应用程序开机启动
前言
由于使用windows自动的自启方法,不管是将程序启动服务放到开机自启文件夹中,还是创建任务计划程序,都没有很好的实现程序的开机自启效果,而WinSW很好的解决了这个问题。
下载
WinSW下载地址
注意:不同版本,有些配置是不一样的,比如我用的这个版本log mode就弃用了rotate模式,推荐使用roll模式。
这里我用的版本是: v2.12.0。
配置介绍
配置的话其实在下载的那两个xml文件中就有介绍到,翻译着看也能懂的,这里再介绍一下比较常用的。
sample-allOptions.xml
包含此版本的全部配置说明,文档不长,介绍的也很详细。
sample-minimal.xml
给出一个最简单的示例配置,临时用用就够了。
<service> <id>Minio-Server</id> <name>Minio-Server</name> <description>这个服务的描述</description> <env name="HOME" value="%BASE%"/> <env name="MY_TOOL_HOME" value="C:\etc\tools\myTool" /> <env name="LM_LICENSE_FILE" value="host1;host2" /> <depend>service_id1</depend> <depend>service_id2</depend> <startmode>Automatic</startmode> <delayedAutoStart/> <!-- 要执行的可执行文件 --> <executable>%BASE%\xxx.exe</executable> <!-- 可执行文件传递的参数 --> <arguments>server "%BASE%\data"</arguments> <stopexecutable>%BASE%\xxx.exe -s stop</stopexecutable> <stoparguments>server "%BASE%\data"</stoparguments> <!-- <logmode>rotate</logmode> --> <logpath>%BASE%\logs</logpath> <log mode="roll-by-size-time"> <sizeThreshold>10240</sizeThreshold> <pattern>yyyyMMdd</pattern> <autoRollAtTime>00:00:00</autoRollAtTime> <zipOlderThanNumDays>5</zipOlderThanNumDays> <zipDateFormat>yyyyMMdd</zipDateFormat> </log> </service>
关于日志的的配置详细说明: 支持模式: append - Rust更新现有日志; none -不将可执行日志保存到磁盘; reset -在启动时擦除日志文件; roll-基于大小的滚动日志; roll-by-time-根据时间滚动日志; rotate -根据大小轮换日志,(8个日志,每个10MB)。此模式已弃用,请使用"roll".
roll模式的默认配置:
<!--工作方式类似于追加模式, 但除此之外,如果日志文件的大小超过了设定的大小, 它将滚转到myapp.1.out.log、myapp.2.out.log等等。 嵌套的<sizeThreshold>元素指定以KB为单位的旋转阈值(默认为10MB), 嵌套的<keepFiles>元素指定要保留的滚动文件的数量(默认为8)。--> <log mode="roll-by-size"> <sizeThreshold>10240</sizeThreshold> <keepFiles>8</keepFiles> </log>
roll-by-time配置:按日志文件时间段滚动
<!--必须嵌套pattern标签指定日志文件名的时间标记格式,例如yyyyMMdd HH:mm--> <log mode="roll-by-time"> <pattern>yyyyMMdd</pattern> </log>
roll-by-size-time配置:按日志文件大小和时间模式滚动
<!--嵌套sizeThreshold标签指定日志文件多大时生成新日志文件,单位为KB 嵌套pattern标签指定当日志文件文件名最后的区分字段格式(时间格式,如yyyyMMdd HH:mm) 嵌套autoRollAtTime标签指定每天在指定时间进行日志滚,例如00:00:00表示每天凌晨进行日志滚动--> <log mode="roll-by-size-time"> <sizeThreshold>10240</sizeThreshold> <pattern>yyyyMMdd</pattern> <autoRollAtTime>00:00:00</autoRollAtTime> </log>
具体参考官方文档:log配置项说明及示例
可能有些配置文档中和官方给的下载xml中不一样,比如这个log mode参数,官方给的xml就没提到过roll-by-size-time这个配置,但是文档中有,其实也可以用。
示例
jar包启动示例
<service> <!-- 服务唯一ID --> <id>imApiId</id> <!-- 服务名称--> <name>imApiService</name> <!-- 服务描述--> <description>this is im api,author:chaodev</description> <executable>java</executable> <arguments>-jar imApi.jar</arguments> <!-- 开机启动 --> <startmode>Automatic</startmode> <!-- 日志配置 --> <logpath>%BASE%\logs</logpath> <logmode>roll</logmode> </service>
注意:
id:唯一标识,我设为jar包的名称
name:服务中展示的名字
description:服务描述
executable:java 或 jdk路径
arguments:执行的命令和jar包路径,我这因为jar包和xml在一个目录,可以直接写jar包名,路径没给出也可以,给路径时,需要加双引号,ru:"d:/ff/xxx.jar"。
启动注册服务:在xxx.exe当前目录中进入cmd ,执行xxxexe install,服务中就注册成功了
扩展:补偿两个手动启动的bat脚本:
1. 后台启动
# @echo off %1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit java -jar C:\Users\Administrator\Desktop\aa\jnpf-admin-3.4.5-RELEASE.jar > imApiLog.log 2>&1 & exit
后台启动,启动日志及后续访问日志(相当于控制台输出日志),显示在脚本中设置的imApiLog.log中; 关闭服务: netstat -ano|findstr 8088 # 根据端口号查进程 taskkill /f /pid 13968 # 根据进程id杀进程(/f:强制结束该进程以及所有子进程)
2. dos窗口启动
@echo off & setlocal EnableDelayedExpansion title xxxx服务 for %%a in (8080) do ( set pid=0 for /f "tokens=2,5" %%b in ('netstat -ano ^| findstr ":%%a"') do ( set temp=%%b for /f "usebackq delims=: tokens=1,2" %%i in (`set temp`) do ( if %%j==%%a ( taskkill /f /pid %%c set pid=%%c echo 端口号【%%a】相关进程已杀死 ) else ( echo 不是本机占用端口【%%a】 ) ) ) if !pid!==0 ( echo 端口号【%%a】没有占用 ) java -Xms1024m -Xmx1024m -Dfile.encoding=utf-8 -jar xxx.jar ) echo 操作完成 pause
安装服务
将前边准备好的xml文件及下载的WinSW程序拷贝到需要配置开机自启的程序文件夹,根据需求重命名这两个文件,注意保持两个文件名一致
。
注意:
id:唯一标识,我设为jar包的名称
name:服务中展示的名字
description:服务描述
executable:java 或 jdk路径
arguments:执行的命令和jar包路径,我这因为jar包和xml在一个目录,可以直接写jar包名,路径没给出也可以,给路径时,需要加双引号,ru:"d:/ff/xxx.jar"。
启动注册服务:在imNginxService.exe当前目录中进入cmd ,输入 imNginxService.exe install 回车,服务中就注册成功了
执行指令
执行命令: 安装服务: WinSW-x64.exe install 卸载服务: WinSW-x64.exe uninstall 启动服务: WinSW-x64.exe start 停止服务: WinSW-x64.exe stop 重启服务: WinSW-x64.exe restart 检查服务状态: WinSW-x64.exe status 刷新服务属性而不是重新安装: WinSW-x64.exe refresh
参考链接:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2019-12-20 测试winform自动悬浮
2017-12-20 Newtonsoft.Json 序列化和反序列化 以及时间格式 2 高级使用