WinSW XML 配置参数介绍

文章目录

    • [1. 基本信息](#1. 基本信息)
    • [2. 启动命令](#2. 启动命令)
    • [3. 停止命令](#3. 停止命令)
    • [4. 日志配置](#4. 日志配置)
    • [5. 环境变量](#5. 环境变量)
    • [6. 启动模式](#6. 启动模式)
    • [7. 失败恢复](#7. 失败恢复)
    • [8. 服务依赖](#8. 服务依赖)
    • [9. 进程优先级](#9. 进程优先级)
    • [10. 运行账户](#10. 运行账户)
    • [11. 高级功能](#11. 高级功能)
    • 完整配置示例
    • 注意事项
    • 参考资料

WinSW(Windows Service Wrapper)是一个开源工具,用于将任意可执行文件(exe、jar、bat 等)包装成 Windows 服务。配置文件为 XML 格式(通常命名为 your-service.xml),所有参数都在 <service> 根节点下(注意:不是 <configuration>)。

以下是 WinSW 3.x 版本的完整参数列表,按功能分类整理。


1. 基本信息

参数 类型 必填 默认值 说明 示例
<id> 字符串 服务唯一标识符(用于 sc.exe 和注册表) <id>myapp</id>
<name> 字符串 服务显示名称(在服务管理器中显示) <name>My Spring Boot App</name>
<description> 字符串 服务描述信息 <description>xx管理系统</description>

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>

3. 停止命令

参数 类型 必填 默认值 说明 示例
<stopexecutable> 字符串 停止服务时执行的程序(可选) <stopexecutable>cmd</stopexecutable>
<stoparguments> 字符串 停止程序的参数 <stoparguments>/c stop.bat</stoparguments>
<stoptimeout> 时间 15 sec 停止超时时间(超时后强制终止) <stoptimeout>30 sec</stoptimeout>

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> 块元素 新版日志配置(推荐) 见下方示例

日志配置示例

xml 复制代码
<!-- 推荐:按大小滚动 -->
<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 并合理设置保留文件数

5. 环境变量

参数 类型 说明 示例
<env> 块元素 设置环境变量(可配置多个) <env name="JAVA_HOME" value="C:\jdk"/>
xml 复制代码
<env name="PATH" value="%PATH%;C:\tools"/>
<env name="SPRING_PROFILES_ACTIVE" value="prod"/>

6. 启动模式

参数 类型 默认值 说明 示例
<startmode> 字符串 Automatic 服务启动类型: • Automatic - 自动启动 • Manual - 手动启动 • Disabled - 禁用 <startmode>Automatic</startmode>
<delayedAutoStart> 布尔 false 是否延迟自动启动(减少启动冲突) <delayedAutoStart>true</delayedAutoStart>

7. 失败恢复

参数 类型 说明 示例
<onfailure> 块元素 服务失败时的动作(新版语法,可多个) 见下方示例
xml 复制代码
<!-- 第1次失败:10秒后重启 -->
<onfailure action="restart" delay="10 sec"/>
<!-- 第2次失败:30秒后重启 -->
<onfailure action="restart" delay="30 sec"/>
<!-- 第3次及以后:不处理 -->
<onfailure action="none"/>

可用的 action 值:

  • restart - 重启服务
  • reboot - 重启计算机
  • none - 不处理

8. 服务依赖

参数 类型 说明 示例
<depend> 字符串 依赖的其他服务(逗号分隔) <depend>MySQL80,Redis</depend>

9. 进程优先级

参数 类型 默认值 说明 示例
<priority> 字符串 Normal 进程优先级: • IdleBelowNormalNormalAboveNormalHighRealtime(不推荐) <priority>High</priority>

10. 运行账户

参数 类型 说明 示例
<serviceaccount> 块元素 指定服务运行的账户(推荐) 见下方示例
xml 复制代码
<!-- 使用本地系统账户 -->
<serviceaccount>
  <domain>NT AUTHORITY</domain>
  <user>LocalService</user>
</serviceaccount>

<!-- 使用指定用户 -->
<serviceaccount>
  <domain>.</domain>
  <user>Administrator</user>
  <password>yourpassword</password>
  <allowservicelogon>true</allowservicelogon>
</serviceaccount>

11. 高级功能

参数 类型 说明 示例
<download> 块元素 启动前从 URL 下载文件 <download from="https://example.com/app.jar" to="app.jar"/>
<resetfailure> 时间 失败计数器重置时间 <resetfailure>1 day</resetfailure>

完整配置示例

xml 复制代码
<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>

注意事项

  1. 根节点是 <service>,不是 <configuration>
  2. 路径支持环境变量%BASE% 指向 exe 所在目录
  3. 时间单位secminhourday
  4. 大小单位:KB(千字节)
  5. <logmode>none</logmode> 慎用:生产环境建议保留日志便于排查问题

参考资料

相关推荐
怪兽软家1 小时前
DaVinci Resolve/达芬奇 20安装教程及下载
windows·经验分享·生活
chao1898441 小时前
完整MES系统实现 (C# 客户端服务器)
服务器·windows·c#
Hello_Embed3 小时前
Windows 安装 Claude Code 并接入 模型
windows·笔记·ai编程
Muyuan19983 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
AxureMost4 小时前
4DDiG DLL Fixe 1.0.8.2 系统DLL修复工具
windows
怣疯knight6 小时前
Windows不安装 Android Studio如何打包安卓软件
android·windows·android studio
空中海7 小时前
02. 静态逆向、Manifest 分析与 Smali 重打包
服务器·网络·windows
一拳一个娘娘腔7 小时前
告别图形化界面:基于CLI的Windows系统入侵排查与防御实战手册
windows·安全
疋瓞8 小时前
批处理_基础补充、文件和文件夹处理_02
windows
nudt_qxx9 小时前
Ubuntu 24.04/26.04 与 Windows 10/11 双系统时间不同步终极解决方案
windows·stm32·ubuntu