java - 使用 JPackage 或 Java 如何删除使用预 JPackage 安装程序创建的文件
问题描述
以前我使用Izpack安装我的 Java 应用程序,当用户想要安装新版本时,他们只是重新安装到相同的位置(C“/Program Files/Jthink/Jaikoz”),这将用新文件替换旧文件,并且有用户无需先卸载旧版本。
我现在使用JPackage(现在是 Java 的一部分,JDK 14)为最新版本的应用程序构建了一个安装程序,它会继续安装到相同的位置。问题是因为 JPackage 强制执行新的文件结构(应用程序和运行时子目录),我的文件不再覆盖我现有的文件,所以现在我的两个安装都搞砸了。
因此,我在最新版本中添加了一些代码,以在启动应用程序时删除不再需要的旧文件。但问题是这失败了,因为我没有删除这些文件的权限,我认为这是因为它们是由安装程序安装的(我不确定)
例如,这里我们显示旧文件组,只有系统和管理员有权修改/删除文件。
如果我以管理员身份运行,则代码会毫无问题地删除文件,但客户通常不以管理员身份运行,因此这没有太大帮助。
我有什么选择?
解决方案
您似乎必须将以下参数传递给 jpackage 以识别同一应用程序的安装程序:--win-upgrade-uuid "your_uuid_string"。与以往的 Java/Oracle 文档一样,如果他们尝试过,他们对此不会更加神秘。
我还发现我也必须增加版本号,否则安装程序将快速闪烁并在后台挂起并且什么都不做(直到您重新启动或结束任务):--app-version 1.0.1
您可以在此处生成 UUID:https ://www.uuidgenerator.net/
推荐阅读
- c - 何时唤醒读写器问题中的作者?在释放互斥锁之前还是之后?
- android - 如何开始一个没有父母的新活动?
- docker - BitBucket Pipeline 在 ssh 进入 DigitalOcean Droplet 后找不到容器
- python - Talos 多 GPU 功能
- python - 自动在网址末尾添加斜杠
- javascript - 如何在自动完成输入上设置 addEventListener 并提供多个源回调并一一使用
- javascript - JavaScript NodeJs - 如何重构这一点
- javascript - Firefox AddOn 扩展中 contextMenu 选项的可见性
- kubernetes - 如何从流利的位日志记录中排除命名空间
- javascript - 为什么innerHTML返回null