1.winsw下载
Windows Service Wrapper是一个可执行二进制文件,可用于包装和管理作为Windows服务的自定义进程。下载安装包后,您可以将 WinSW.exe 重命名为任何名称,例如 MyService.exe 。接下来您可以创建Myservice.xml文件进行服务配置。最后 MyService.exe install安装到服务即可。
下载地址1: https://github.com/winsw/winsw/releases
下载地址2: https://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/
文档配置说明:https://github.com/winsw/winsw/blob/v3/docs/xml-config-file.md
下载地址1截图(这里可以选择对应.NET版本,老系统选.NET2,新系统选.NET4)

下载地址2截图

2.注册Nginx到win服务
2.1 首先将下载的winsw下并改名

2.2 nginx-service.exe.config配置
创建config文件,配置固定的,直接用
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
<supportedRuntime version="v4.0" />
</startup>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>
2.3 nginx-service.xml配置
创建xml文件,配置根据文件路径或名称灵活修改
<service>
<!-- 唯一服务ID -->
<id>Nginx</id>
<!-- 显示服务的名称 -->
<name>Nginx Service</name>
<!-- 服务描述 -->
<description>High Performance Nginx Service</description>
<!-- 日志路径 -->
<logpath>D:\openresty\logs</logpath>
<!-- 日志模式-->
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
<!-- 可执行文件的命令 -->
<executable>D:\openresty\nginx.exe</executable>
<!-- 启动参数 -->
<startarguments>-p D:\openresty</startarguments>
<!-- 停止可执行文件的命令 -->
<stopexecutable>D:\openresty\nginx.exe</stopexecutable>
<!-- 停止参数 -->
<stoparguments>-p D:\openresty -s stop</stoparguments>
</service>
2.4 nginx-service安装到服务
当前目录下输入cmd命令:nginx-service.exe install
3.注册Jar包到win服务
当前有一jar包,端口为8088,现在要将其注册到服务

start.bat文件:
java -jar test.jar
stop.bat文件:
@echo off
title 关闭某一端口
set port=8088
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (taskkill /f /pid %%m)
pause
接下来就是三步走(没必要像nginx那样编写config文件)
3.1 复制winsw文件并改名
将winsw改名为test-service.exe

3.2 创建xml配置文件

<service>
<id>Test</id>
<name>Test Service</name>
<description>Test Jar</description>
<executable>C:\Users\Administrator\Desktop\test\start.bat</executable>
<stopexecutable>C:\Users\Administrator\Desktop\test\stop.bat</stopexecutable>
</service>
3.3 执行安装命令
#服务安装
test-service.exe install
#启动服务
net start test
#关闭服务
net stop test




如果要卸载服务,输入sc delete 服务ID


4. WinSW 配置文件 模式说明
WinSW(Windows Service Wrapper)是一个开源工具,用于将任意可执行文件(exe、jar、bat 等)包装成 Windows 服务。配置文件为 XML 格式(通常命名为 your-service.xml),所有参数都在 <service> 根节点下(注意:不是 <configuration>)。
以下是 WinSW 3.x 版本的完整参数列表,按功能分类整理。
4. 1 基本信息
| 参数 | 类型 | 必填 | 默认值 | 说明 | 示例 |
|---|---|---|---|---|---|
<id> | 字符串 | ✅ | 无 | 服务唯一标识符(用于 sc.exe 和注册表) | <id>myapp</id> |
<name> | 字符串 | ✅ | 无 | 服务显示名称(在服务管理器中显示) | <name>My Spring Boot App</name> |
<description> | 字符串 | ❌ | 空 | 服务描述信息 | <description>XX管理系统</description> |
4. 2 启动命令
| 参数 | 类型 | 必填 | 默认值 | 说明 | 示例 |
|---|---|---|---|---|---|
<executable> | 字符串 | ✅ | 无 | 要运行的可执行文件路径(支持环境变量) | <executable>java.exe</executable> |
<arguments> | 字符串 | ❌ | 空 | 传递给可执行文件的参数 | <arguments>-jar app.jar --port=8080</arguments> |
<workingdirectory> | 路径 | ❌ | %BASE% | 工作目录(服务启动时的当前目录) | <workingdirectory>C:\myapp</workingdirectory> |
<startarguments> | 字符串 | ❌ | 同 <arguments> | 启动时的额外参数(一般不用) | <startarguments>--debug</startarguments> |
4. 3 停止命令
| 参数 | 类型 | 必填 | 默认值 | 说明 | 示例 |
|---|---|---|---|---|---|
<stopexecutable> | 字符串 | ❌ | 无 | 停止服务时执行的程序(可选) | <stopexecutable>cmd</stopexecutable> |
<stoparguments> | 字符串 | ❌ | 空 | 停止程序的参数 | <stoparguments>/c stop.bat</stoparguments> |
<stoptimeout> | 时间 | ❌ | 15 sec | 停止超时时间(超时后强制终止) | <stoptimeout>30 sec</stoptimeout> |
4. 4 日志配置
| 参数 | 类型 | 默认值 | 说明 | 示例 |
|---|---|---|---|---|
<logmode> | 字符串 | rotate | 日志模式: • none - 完全禁用文件日志(stdout/stderr 被丢弃)⚠️• append - 追加到单个日志文件• rotate - 按大小滚动(推荐)• roll-by-size - 同 rotate• roll-by-time - 按时间滚动 | <logmode>rotate</logmode> |
<logpath> | 路径 | %BASE%\logs | 日志文件保存路径 | <logpath>C:\logs</logpath> |
<log> | 块元素 | 无 | 新版日志配置(推荐) | 见下方示例 |
日志配置示例
<!-- 推荐:按大小滚动 -->
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold> <!-- 单位:KB,10MB -->
<keepFiles>8</keepFiles> <!-- 保留 8 个历史文件 -->
</log>
<!-- 按时间滚动 -->
<log mode="roll-by-time">
<period>1</period> <!-- 滚动周期(天) -->
<pattern>yyyy-MM-dd</pattern> <!-- 日志文件名日期格式 -->
</log>
<!-- 完全禁用(不推荐用于生产环境) -->
<log mode="none"/>
⚠️ 关于 <logmode>none</logmode>:
- 会丢弃所有输出,无法排查问题
- 适用于无需调试的稳定服务或程序自带日志功能
- 生产环境建议使用
roll-by-size并合理设置保留文件数
4. 5 环境变量
| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
<env> | 块元素 | 设置环境变量(可配置多个) | <env name="JAVA_HOME" value="C:\jdk"/> |
<env name="PATH" value="%PATH%;C:\tools"/>
<env name="SPRING_PROFILES_ACTIVE" value="prod"/>
4. 6 启动模式
| 参数 | 类型 | 默认值 | 说明 | 示例 |
|---|---|---|---|---|
<startmode> | 字符串 | Automatic | 服务启动类型: • Automatic - 自动启动• Manual - 手动启动• Disabled - 禁用 | <startmode>Automatic</startmode> |
<delayedAutoStart> | 布尔 | false | 是否延迟自动启动(减少启动冲突) | <delayedAutoStart>true</delayedAutoStart> |
4. 7 失败恢复
| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
<onfailure> | 块元素 | 服务失败时的动作(新版语法,可多个) | 见下方示例 |
<!-- 第1次失败:10秒后重启 -->
<onfailure action="restart" delay="10 sec"/>
<!-- 第2次失败:30秒后重启 -->
<onfailure action="restart" delay="30 sec"/>
<!-- 第3次及以后:不处理 -->
<onfailure action="none"/>
可用的 action 值:
restart- 重启服务reboot- 重启计算机none- 不处理
4. 8 服务依赖
| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
<depend> | 字符串 | 依赖的其他服务(逗号分隔) | <depend>MySQL80,Redis</depend> |
4. 9 进程优先级
| 参数 | 类型 | 默认值 | 说明 | 示例 |
|---|---|---|---|---|
<priority> | 字符串 | Normal | 进程优先级: • Idle• BelowNormal• Normal• AboveNormal• High• Realtime(不推荐) | <priority>High</priority> |
4. 10 运行账户
| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
<serviceaccount> | 块元素 | 指定服务运行的账户(推荐) | 见下方示例 |
<!-- 使用本地系统账户 -->
<serviceaccount>
<domain>NT AUTHORITY</domain>
<user>LocalService</user>
</serviceaccount>
<!-- 使用指定用户 -->
<serviceaccount>
<domain>.</domain>
<user>Administrator</user>
<password>yourpassword</password>
<allowservicelogon>true</allowservicelogon>
</serviceaccount>
4. 11 高级功能
| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
<download> | 块元素 | 启动前从 URL 下载文件 | <download from="https://example.com/app.jar" to="app.jar"/> |
<resetfailure> | 时间 | 失败计数器重置时间 | <resetfailure>1 day</resetfailure> |
完整配置示例
<service>
<!-- 基本信息 -->
<id>myapp</id>
<name>My Application</name>
<description>Spring Boot 应用程序</description>
<!-- 启动命令 -->
<executable>java</executable>
<arguments>-Xms512m -Xmx1024m -jar app.jar</arguments>
<workingdirectory>C:\myapp</workingdirectory>
<!-- 停止配置 -->
<stoptimeout>30 sec</stoptimeout>
<!-- 日志 -->
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
<!-- 环境变量 -->
<env name="JAVA_HOME" value="C:\jdk"/>
<!-- 启动模式 -->
<startmode>Automatic</startmode>
<delayedAutoStart>true</delayedAutoStart>
<!-- 失败恢复 -->
<onfailure action="restart" delay="10 sec"/>
<onfailure action="restart" delay="30 sec"/>
<resetfailure>1 day</resetfailure>
<!-- 依赖 -->
<depend>MySQL80</depend>
<!-- 优先级 -->
<priority>Normal</priority>
</service>
注意事项
- 根节点是
<service>,不是<configuration> - 路径支持环境变量:
%BASE%指向 exe 所在目录 - 时间单位:
sec、min、hour、day - 大小单位:KB(千字节)
<logmode>none</logmode>慎用:生产环境建议保留日志便于排查问题
注意:
1. xml和exe文件名一定得一致
2. 文件名用来安装和卸载
3. 服务ID用来sc和net操作
本文介绍了如何利用winsw将Nginx和Java Jar包注册为Windows服务。首先,详细解释了winsw的作用和配置方法,接着提供了注册Nginx服务的步骤,包括winsw重命名、配置文件设置和安装服务。然后,阐述了注册Jar包到服务的过程,涉及winsw的复制、XML配置文件创建和安装命令的执行。

1万+

被折叠的 条评论
为什么被折叠?



