以前我使用Izpack安装我的Java应用程序,当用户想要安装一个新版本时--他们只是重新安装到同一个位置(C"/Program Files/Jthink/Jaikoz"),这将用较新的文件取代旧的文件,并且用户不需要首先卸载旧版本。
我现在已经使用JPackage (现在是Java 14的一部分)为应用程序的最新版本构建了一个安装程序,这将继续安装到相同的位置。问题在于,由于JPackage强制执行了一个新的文件结构(app和运行时子目录),我的文件不再覆盖现有的文件,所以现在两个安装都搞混了。
因此,在启动应用程序时,我在最新版本中添加了一些代码,以删除旧的不再需要的文件。但问题在于,这是因为我没有删除这些文件的权限,我认为这是因为它们是由安装程序安装的(我不确定)
这里我们显示了一组旧文件,只有系统和管理员有修改/删除文件的权限。

如果我以管理员的身份运行,那么代码就会删除这些文件,不会有问题,但是客户以管理员的身份运行并不常见,所以这不是很好的帮助。
我有什么选择?
发布于 2021-05-07 23:35:07
似乎您必须将以下参数传递给jpackage以标识同一应用程序的安装程序:--双赢升级-uuid "your_uuid_string“。与Java/Oracle文档一样,如果他们尝试的话,他们在这方面再神秘不过了。
我还发现,我也必须增加版本号,否则安装程序会快速闪现,挂在后台,什么也不做(直到您重新启动或结束任务):-app- version 1.0.1
您可以在这里生成一个UUID:https://www.uuidgenerator.net/
发布于 2022-06-12 19:24:58
如果将参数“--每个用户--安装”传递给jpackage命令,msi将在"C:/User/x/AppData/Local“下安装应用程序,并将有权在自己的文件夹中写入。
这只会在将来帮助清理文件,但是C:/Programme下的旧文件恐怕我也不知道。如果您可以使用您的应用程序读取文件夹。当然,如果您检测到旧文件,您可以从应用程序中指示用户如何自己清理旧文件。
https://stackoverflow.com/questions/62676816
复制相似问题