Winsw将jar包部署为windows服务

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

公司有个需求,需要将springboot生成的jar包部署在windows上,以服务开机自启动的形式,找了一下,好多人都在用winsw,于是开始我的踩坑之旅.

首先,下载winsw官网上的xml文件和.exe文件,官网,然后随便找两个文件,楼主找的是这两个文件

然后自己创建一个文件夹,将所需要转换的jar包,和这两个文件放在一起,并且将.exe的文件名修改和.xml文件一样,这里注意,.exe文件里面的内容不需要修改,我们只需要修改.xml文件里的内容 

 看官网,里面的配置可以配置好多内容:

<!--
 这是Windows服务包装器的一个配置示例。
 此配置文件应放在WinSW.exe同目录,名称应相同。
 例如,对于myapp.exe,配置文件名应为myapp.xml。

 更多信息:https://github.com/kohsuke/winsw/blob/master/doc/xmlconfigfile.md
-->
<configuration>
  
<!-- 
SECTION: 必填项
-->
  
  <!-- 服务ID,在windows系统中必须唯一 -->
  <id>myapp</id>
  <!-- 服务显示名称,只能英文和数字 -->
  <name>MyApp Service (powered by WinSW)</name>
  <!-- 服务描述,只能英文和数字 -->
  <description>This service is a service cratead from a sample configuration</description>
  
  <!-- 启动可执行文件的路径 -->
  <executable>%BASE%\myExecutable.exe</executable>

<!--
SECTION: 安装
这些选项仅在安装时有效。修改配置后,必须重新安装服务才能生效。
-->

  <!--
    OPTION: serviceaccount
    定义运行服务的账号。
  -->
  <!--
  <serviceaccount>
    <domain>YOURDOMAIN</domain>
    <user>useraccount</user>
    <password>Pa55w0rd</password>
    <allowservicelogon>true</allowservicelogon>
  </serviceaccount>
  -->
  
  <!--
    OPTION: onfailure
    定义一系列操作,如果托管的可执行文件失败,则顺序执行这些操作。
    支持的操作:restart,reboot,none
  -->
  <!--
  <onfailure action="restart" delay="10 sec"/>
  <onfailure action="restart" delay="20 sec"/>
  <onfailure action="reboot" />
  -->
  
  <!--
    OPTION: resetfailure
    windows服务重置故障状态的时间。
    默认值 1 day
  -->
  <!--
  <resetfailure>1 hour</resetfailure>
  -->

<!--
SECTION: 执行管理配置
-->

  <!-- 
    OPTION: arguments
    传递给可执行文件的参数。
  -->
  <!--
  <arguments>-classpath c:\cygwin\home\kohsuke\ws\hello-world\out\production\hello-world test.Main</arguments>
  -->

  <!-- 
    OPTION: startarguments
    可执行文件启动参数。
    如果配置,则覆盖"arguments"
  -->
  <!--
  <startarguments></startarguments>
  -->
  
  <!--
    OPTION: workingdirectory
    如果指定,则设置可执行文件的默认工作目录。
    默认值:服务包装的可执行文件的目录
  -->
  <!--
  <workingdirectory>C:\myApp\work</workingdirectory>
-->
  
  <!--
    OPTION: priority
    所需的进程优先级。
    可设置的值:Normal, Idle, High, RealTime, BelowNormal, AboveNormal
    默认值:Normal
  -->
  <priority>Normal</priority>
  
  <!-- 
    OPTION: stoptimeout
    强制终止可执行文件之前,尝试正常关闭的等待时间。
    默认值:15 seconds
  -->
  <stoptimeout>15 sec</stoptimeout>
    
  <!--
    OPTION: stopparentprocessfirst
    如果设置为true,在停止子进程之前终止父进程。
    默认值:false
  -->
  <stopparentprocessfirst>false</stopparentprocessfirst>

  <!-- 
    OPTION: stopexecutable
    执行关闭服务的可执行文件路径。
    只有配置了"stoparguments"时,才使用此配置。如果没有则用"executable"关闭服务
  -->
  <!--
  <stopexecutable>%BASE%\stop.exe</stopexecutable>
  -->

  <!-- 
    OPTION: stoparguments
    终止服务时,传递给"stopexecutable"的附加参数
    此选项还允许通过停止可执行文件终止可执行文件
  -->
  <!--
  <stoparguments>-stop true</stoparguments>
  -->
<!-- 
SECTION: 服务管理
-->
    <!--
      OPTION: startmode
      定义服务的启动模式
      支持的模式:Automatic, Manual, Boot, System (latter ones are supported for driver services only)
      默认模式:Automatic
    -->
    <startmode>Automatic</startmode>
    
    <!--
      OPTION: delayedAutoStart
      如果在"startmode"配置了"Automatic",则启用延迟自动启动。
      请参阅Winsw文档以获取有关支持的平台版本和限制的信息。
    -->
    <!--
        <delayedAutoStart/>
    -->
    
    <!-- 
      OPTION: depend
      在本服务启动之前启动的服务。
    -->
    <!--
    <depend>Eventlog</depend>
    <depend>W32Time</depend>
    -->
    
    <!--
      OPTION: waithint
      挂起停止操作所需的时间
      在指定的时间段过去之前,服务应该下次调用setServiceStatus函数。
      否则服务将被标记为无响应
      默认值:15 seconds
    -->
    <waithint>15 sec</waithint>
    
    <!--
      OPTION: sleeptime
      服务下次调用setServiceStatus函数之前的时间。
      不要超过"waithint"。建议间隔是"waithint"的十分之一,但不小于1秒,也不大于10秒。
      默认值:1 second
    -->
    <sleeptime>1 sec</sleeptime>
    
    <!--
      OPTION: interactive
      指示服务可以与桌面交互。
    -->
    <!--
    <interactive/>
    -->
    
<!-- 
SECTION: 日志记录 
-->

  <!--
    OPTION: logpath
    为服务包装程序生成的所有日志设置自定义日志目录。
    默认值:包含执行器的目录
  -->
  <!--
    <logpath>%BASE%\logs</logpath>
  -->
  
  <!--
    OPTION: log
    为可执行文件生成的日志定义日志记录模式。
    支持的模式:
      * append - 追加到现有日志
      * none - 不保存日志
      * reset - 启动时擦除日志
      * roll - 根据大小自动循环分割日志
      * roll-by-time - 根据日期循环分割日志
    默认模式: append
    
    每种模式都有不同的设置。https://github.com/kohsuke/winsw/blob/master/doc/loggingAndErrorReporting.md
  -->
  <log mode="append">
    <!--
    <setting1/>
    <setting2/>
  -->
  </log>
  
<!--
SECTION: 环境设置
-->
  <!--
    OPTION: env
    设置或重写环境变量。
    顶层可能配置了多个条目。
  -->
  <!--
  <env name="MY_TOOL_HOME" value="C:\etc\tools\myTool" />
  <env name="LM_LICENSE_FILE" value="host1;host2" />
  -->


  <!--
    OPTION: download
    启动前由包装器执行的下载列表。
  -->
  <!--
  <download from="http://www.google.com/" to="%BASE%\index.html" />
  
  下载并在出现错误时使服务启动失败:
  <download from="http://www.nosuchhostexists.com/" to="%BASE%\dummy.html" failOnError="true"/>

  由于连接未加密而导致基本身份验证不安全的示例:
  <download from="http://example.com/some.dat" to="%BASE%\some.dat"
            auth="basic" unsecureAuth=“true”
            username="aUser" password=“aPassw0rd" />

  通过HTTPS安全基本身份验证
  <download from="https://example.com/some.dat" to="%BASE%\some.dat"
            auth="basic" username="aUser" password="aPassw0rd" />

  当目标服务器和客户端是同一域的成员,并且客户端域属于具有信任的域时,安全身份验证:
  <download from="https://example.com/some.dat" to="%BASE%\some.dat" auth="sspi" />
  -->

<!-- 
SECTION: 其他选项
-->
  
  <!--
    OPTION: beeponshutdown
    指示服务在关闭时(如果操作系统支持)应发出嘟嘟声。
  -->
  <!--
  <beeponshutdown/> 
  -->
  
<!--
SECTION: 扩展
此配置部分允许指定自定义扩展。
更多信息请访问:https://github.com/kohsuke/winsw/blob/master/doc/extensions/extensions.md
-->

<!--
<extensions>
  Extension 1: id values must be unique
  <extension enabled="true" id="extension1" className="winsw.Plugins.SharedDirectoryMapper.SharedDirectoryMapper">
    <mapping>
      <map enabled="false" label="N:" uncpath="\\UNC"/>
      <map enabled="false" label="M:" uncpath="\\UNC2"/>
    </mapping>
  </extension>
  ...
</extensions>
-->

</configuration>

楼主的myservice.xml文件是这样的

这里最让人迷惑的是executable这个标签里的内容:看了很多前辈的写法,有写java的,有写此可执行文件的,但是,以身试法之后,发现,其实这里写的是你本地jdk下的bin下的java.exe这个可执行文件,然后arguments这个标签里写的就是该目录下的我们需要执行的jar包 !!!!

配置好之后,在该目录下打开cmd文件,然后

之后可以在服务列表里查看,然后启动就可以啦 

如果在服务列表里已经有了该服务,但是无法启动,可以在系统事件查看器里查看报错:

打开事件查看器,可以在win10系统中查找:

 

然后对应查看到底是什么问题.这里大多数的报错都是 executable这个标签配置的引起的.

 

踩坑:之前不晓得到底是哪里出现了错误,有说删除注册表中数据的,..导致我电脑连不上网络...还有说修改IIS中标识的

写这个博客的目的也是希望别的老哥需要用到winsw时候少走一些弯路 

windows 下日志切割,清理 基础软件和服务都会产生日志,当日志太多就会占用磁盘空间,因此需要定期清除,windows通常使用bat脚本处理 一:日志切割: 1.windows脚本,以nginx 为例 @echo off c: set nginx=%C:\Users\Lenovo\Desktop% set "cmdstr=move %nginx%\logs\access.log %nginx%\logs\access.%date:~0,4%-%date:~5,2%-%date:~8,2%.log call %cmdstr%" set 阅读详情

相关推荐

Windows部署jarWinSW服务,windows部署WinSW,WinSW部署

Windows部署jarWinSW服务,windows部署WinSW,WinSW部署

chuyang11的博客 1083

winsw的学习

winsw

牧羊老人 1639

Windows使用WinSW实现开机自启动服务

在windwos系统中,有时候需要javajar开机自启动,或者nginx的开机自启动,或者内网穿透工具(frp)的开机自启动,使用WinSW是一种很好的选择,记录一下使用WinSW实现的方式

蚂蚁舞 2993

Windows部署Jar的三种方式

cmd、bat脚本和WinSW方式。

程序员大佬超的博客 1万+

使用WinSWJava JAR部署Windows服务的完整指南

Windows服务器环境中,将Java应用部署为可靠的后台服务是常见的运维需求。其核心原理是通过服务装工具,将Java进程托管给Windows服务管理器,从而实现服务的生命周期管理、开机自启和故障恢复。这一技术对于保障Spring Boot等Java应用的稳定运行具有重要价值,尤其适用于微服务、数据处理任务等需要长期在线的后台服务场景。本文以WinSW工具为例,详细解析了如何通过XML配置驱动的方式,高效解决JAR部署中的依赖管理、日志收集和权限控制等实际问题,并提供了从环境准备到生产部署的完整实践路

weixin_31856057的博客 325

通过WinSW部署JARwindows服务

通过WinSW部署JARwindows服务 背景 使用 Java 编写了一些有用的工具,因为不方便部署服务器上,所以需要把 Java 生成的 jar 在本地 Windows部署。 查阅了几种部署方式,认为通过 winsw 进行部署最方便。 安装 winsw 进入 winsw 的下载页面 下载 sampleminimal.xml 和 WinSW-x64.exe 文件。如: 配置 wi...

Mr-吴の客栈 683

Java】使用WinSW将SpringBoot Jar部署Windows服务

一般来说很少用windows系统来部署java项目,但有时候给别人开发的项目,只有windows电脑进行部署,使用的时候一直有一个黑窗口还有提醒用户不要关闭,实在是太碍事了.所以就考虑到能不能将java项目部署windows服务,在后台运行,开机自启动.

Passer_hua的博客 1265

Windows 系统服务部署jar时,推荐使用winsw,将jar注册成服务,并设置开机启动。

2、使用计划任务,写一个bat处理文件,里面写java -jar运行程序,然后把bat文件作为一个计划任务运行;1、Spring Boot生成的jar,可以直接用java -jar运行,但是前提是需要登录用户,而且注销用户后会退出程序,所以不可用。rotate(旋转模式,推荐)当日志文件大小达到10兆(默认值),winsw会将日志重新输出到另外一份日志文件,默认最多保留8个。1. 在ruoyiAdminService.exe的所处目录中输入cmd,进入命令行模式,执行服务注册命令。2.下载对应的版本。

qq_33286757的博客 2879

springboot jar + vue nginx 部署Windows服务winsw工具

springboot jar + vue nginx 部署Windows服务器 前后端分离项目部署服务器,使用winsw工具,创建服务器本地服务持久运行(linux上的nohup命令) 下载winsw 下载地址 下载需要的.xml和.exe文件 一.部署jar 1.将下载的.exe和.xml与springboot的jar放在同一个文件夹下(log文件夹是服务运行后生成的日子文件不用管),并且将.exe的文件名修改和.xml文件一样 2.配置.xml内容(附上一份网上找的可选项) <!--

weixin_42508580的博客 697

把nginx、jar、redis做成windows系统服务,开机自动启动

本文介绍了将若依框架系统各组件配置为Windows系统服务的方法。系统含前端(Nginx部署)、后端Java jar)、MySQL和Redis四部分。对于Redis,使用sc命令创建自启动服务;Nginx和Java后端则使用WinSW工具,通过编写XML配置文件定义服务参数(括路径、日志、自启动等),并执行安装命令。文中详细说明了服务创建、启动、删除的具体操作步骤,以及配置文件的编写要点,帮助实现系统异常时自动重启的功能。

qq_37372909的博客 1306

通过winsw将SpringBoot可运行jar做成后台服务,启动运行

一,背景 因为网络限制,目前开发的一个SpringBoot项目不能部署到Linux设备上,必须要部署Windows上。winsw(https://github.com/kohsuke/winsw/releases),winsw是一个可以将任何应用程序注册成服务的软件 二,步骤 a,去上面给出的链接里下载自己所需的文件,选择了最新版本的winsw。主要需要下载两个文件,一个是sample-mini...

Pruett的博客 2089

Springboot3学习(8、打部署之使用WinSW

使用WinSW将springboot项目部署windows服务,运行管理

weixin_38696566的博客 625

SpringBoot部署Windows服务部署

SpringBoot 内置了Tomcat服务器,目的是为了简化部署的难度,直接用java -jar 命令即可。使用WinSW部署java类应用也比较实用

港城大白鲨 6006

windows 部署开机服务

4. 点击nssm.exe,在弹框中配置bat、exe等脚本路径和服务名称。1. 下载修改名字。例如nginx-service.放在软件目录下。3. 将nssm 放到 软件bin 目录下。1. 下载nssm 软件。2. 增加 xml文件。4.设置开机服务自启动。

菜鸟一枚 268

winsw实现注册jarwindows服务

winsw实现注册jarwindows服务 前言 最近需要把项目搞成一个绿色免安装版的压缩,在Linux上利用echo注册启动倒是很顺利,而window上由于微软的各种策略,搞得我处处碰壁。 先是利用echo中sc create注册为服务后根本无法启动,然后又想模仿tomcat中的service.bat,但是发现微软现在对可注册为系统服务的可执行文件有要求,需要自己用c#开发windows服务,这就太难为我了。还好在github上找到了winsw,简直是又简单又好用。下面就来看看到底有多简单。 使

baidu_39373401的博客 795

Windows部署JavaJar

使用 Java 编写了一些有用的工具,因为不方便部署服务器上,所以需要把 Java 生成的 jar 在本地 Windows部署。查阅了几种部署方式,认为通过 winsw进行部署最方便。

weixin_38389124的博客 3105

Java开机自启服务Windows

window开机自启动服务

2302_77162052的博客 237
上一篇: Hadoop中NameNode的主从之间的CheckPoint机制
下一篇: DXF,DWG文件转为PDF格式所用组件
PALIC12
博客等级 码龄8年 10粉丝 47原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值