You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个jpackage安装包置于同一父目录且卸载仅删除子目录?

解决jpackage卸载时仅删除子文件夹的方案

以下是几种无需依赖第三方变通方案的可行方法:

1. 预创建父目录再执行打包

如果parent_directory在安装程序运行前就已存在,jpackage会将其视为系统原有目录,卸载时仅清理自己创建的child_folder,不会删除父目录。

  • 操作步骤:
    • 在打包或安装前,通过脚本提前创建父目录:
      • Linux/macOS:mkdir -p parent_directory
      • Windows:md parent_directory
    • 之后正常执行jpackage命令,指定--install-dir parent_directory/child_folder即可。

2. 自定义安装资源修改卸载逻辑

利用jpackage的--resource-dir参数,替换或补充安装程序的底层脚本,让父目录不被标记为安装创建的目录:

  • 针对不同系统的具体操作:
    • Windows(NSIS):在自定义的NSIS脚本中,手动创建parent_directory(如果不存在),但不将其加入卸载清理列表,仅将child_folder纳入卸载范围。
    • macOS(pkg):修改pkg的安装脚本,确保parent_directory的创建操作不被记录到卸载清单中,只标记child_folder为需要清理的目录。
    • Linux(deb/rpm):在post-install脚本中创建父目录,同时确保卸载脚本仅删除子文件夹,不处理父目录。

3. 将父目录设为共享组件

把parent_directory封装为一个独立的共享组件安装包,先安装该组件(仅创建父目录,无其他内容),再为每个应用执行jpackage打包,指定--install-dir parent_directory/child_folder:

  • 优势:多个应用共享同一父目录时,只有当所有依赖该父目录的应用都卸载后,共享组件才会删除父目录;单个应用卸载仅清理自身的child_folder。
  • 实现要点:共享组件包需设置合适的依赖规则,确保父目录在有应用使用时不会被误删。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:24:54