使用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配置的方式添加预卸载的进程终止逻辑,具体操作如下:
- 先执行一次现有打包命令,在系统临时目录的
fxbundler相关子目录中找到自动生成的.wxs格式WiX配置文件 - 编辑该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>
- 将上述配置中的
[你对应的应用进程名]替换为实际打包生成的exe进程名,Return="ignore"配置可避免应用未运行时taskkill返回错误导致卸载流程中断。 - 在原有javapackager命令中添加
-nativeexe <修改后的wxs文件完整路径>参数,重新执行打包命令即可生效。
验证方法
打包完成后安装应用并启动,直接运行卸载程序,可观察到应用进程会被自动终止后再执行文件删除操作。
内容的提问来源于stack exchange,提问作者Chandan
相关产品推荐
相关产品推荐

