You need to enable JavaScript to run this app. 使用javapackager生成Windows安装包如何添加预卸载执行taskkill步骤
优惠活动
大模型
产品
解决方案
定价
更多

使用javapackager生成Windows安装包如何添加预卸载执行taskkill步骤

Java应用Windows安装包预卸载进程终止实现方案

现有打包基础

已通过javapackager完成Java应用到Windows安装包的打包,使用的基础打包命令如下:
javapackager -deploy -native exe -outdir ./executable -srcfiles springboot2exe-0.0.1-SNAPSHOT.jar -outfile springboot2exe-0.0.1-SNAPSHOT -name springboot2exe-0.0.1-SNAPSHOT -title "Spring Boot 2 .exe" -appclass org.springframework.boot.loader.JarLauncher -v
该方案优势为支持指定专属进程名,应用运行时不会被识别为通用的java.exe或javaw.exe进程,符合业务要求。此前测试的Inno Setup、launch4j等工具无法实现该特性,因此不适用。

预卸载杀进程实现方法

javapackager底层基于WiX Toolset生成Windows安装包,可通过自定义WiX配置的方式添加预卸载的进程终止逻辑,具体操作如下:

  1. 先执行一次现有打包命令,在系统临时目录的fxbundler相关子目录中找到自动生成的.wxs格式WiX配置文件
  2. 编辑该wxs文件,在Product节点下添加如下配置片段:
<!-- 预卸载时终止应用进程 -->
<CustomAction Id="KillRunningApp" 
              Directory="TARGETDIR" 
              ExeCommand="taskkill /f /im [你对应的应用进程名].exe /t" 
              Execute="deferred" 
              Impersonate="no" 
              Return="ignore"/>

<InstallExecuteSequence>
    <!-- 在卸载删除文件前执行杀进程操作 -->
    <Custom Action="KillRunningApp" Before="RemoveFiles">REMOVE="ALL"</Custom>
</InstallExecuteSequence>
  1. 将上述配置中的[你对应的应用进程名]替换为实际打包生成的exe进程名,Return="ignore"配置可避免应用未运行时taskkill返回错误导致卸载流程中断。
  2. 在原有javapackager命令中添加-nativeexe <修改后的wxs文件完整路径>参数,重新执行打包命令即可生效。

验证方法

打包完成后安装应用并启动,直接运行卸载程序,可观察到应用进程会被自动终止后再执行文件删除操作。

内容的提问来源于stack exchange,提问作者Chandan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 14:36:05