使用JPackage或Java,如何删除使用早期JPackage安装程序创建的文件

3
之前我使用了 Izpack 来安装我的 Java 应用程序,当用户想要安装新版本时,他们只需重新安装到同一位置(C:/Program Files/Jthink/Jaikoz),这将用新文件替换旧文件,无需先卸载旧版本。
现在,我已经使用 JPackage(现已成为 Java 的一部分,JDK 14)构建了最新版本的应用程序安装程序,仍然安装到同一位置。问题是,由于 JPackage 强制执行新的文件结构(应用程序和运行时子目录),我的文件不再覆盖现有文件,因此现在我有两个安装程序混淆在一起。
所以我在最新版本中添加了一些代码来删除我启动应用程序时不再需要的旧文件。但问题是,这会失败,因为我没有权限删除这些文件,我认为这是因为它们是由安装程序安装的(我不确定)。
例如,这里我们展示了旧文件组,只有系统管理员才有权限修改/删除这些文件。

enter image description here

如果我以管理员身份运行,则代码可以毫无问题地删除文件,但通常客户不会以管理员身份运行,因此这并没有太大帮助。
我的选择是什么?

旧的izpack文件是否会干扰jpackage安装或程序运行的能力?如果不会,我可能会选择将它们留在那里。当涉及到程序留下遗物时,我见过更糟糕的情况。 - VGR
1
不,它们不会干扰程序运行的能力,但是1>它看起来很凌乱,2>它浪费磁盘空间,3>(最重要的是)如果用户查看内部,他们可能会意外地运行错误的旧应用程序(Jaikoz64.exe、Jaikoz.bat),而不是新应用程序(Jaikoz.exe)。 - Paul Taylor
如果用户运行卸载程序,那么就没有问题,但通常情况下用户不会这样做。 - Paul Taylor
2个回答

4
似乎您需要将以下参数传递给jpackage以识别相同应用程序的安装程序:--win-upgrade-uuid“your_uuid_string”。和Java / Oracle文档一样,如果他们想尝试的话,他们可能不会更神秘。
我还发现,我也必须增加版本号,否则安装程序将快速闪烁并在后台挂起不做任何事情(直到重新启动或结束任务):--app-version 1.0.1
您可以在此处生成UUID:https://www.uuidgenerator.net/

你使用的是哪个版本的JDK?我使用的是JDK 17。与JDK-8214564相关的问题似乎仍然存在。 - user9035826

0

如果您在jpackage命令中传递参数“--win-per-user-install”,则msi将安装应用程序在“C:/User/x/AppData/Local”下,并且将具有在其自己的文件夹内写入的权限。

这只有助于清理未来的文件,但是位于C:/Programme下的旧文件我恐怕也不知道。如果您可以读取带有应用程序的文件夹,则可以从应用程序中给出说明,告诉用户如何检测旧文件并清理它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接