我已经编写了一个包含自我更新程序的Java应用程序。自我更新程序从Web服务器加载新程序版本并替换应用程序文件。如果将应用程序安装在例如用户主目录中,则此方法非常有效,但如果将其安装在C:\ Program Files文件夹中,则在Windows计算机上将失败。这是因为JVM是在对程序目录没有写访问权的用户帐户下执行的。如果本机程序(例如安装程序)尝试写入程序文件夹,通常会出现一个弹出窗口,要求用户允许写入操作。Java应用程序不会发生这种情况。为什么?
有什么方法可以实现对受限文件夹的Java程序写操作会弹出安全弹出窗口,以便用户可以允许访问该文件夹?
感谢您的回复。根据答案,我看到以下选项:
Java Web Start
对我来说,这不是最终用户的选择。我认为没有人会期望普通的最终用户知道Java Web Start是什么,它有什么用处以及如何使用它,例如,我怀疑普通的Windows用户是否知道如何卸载Java Web Start应用程序。
使用带有清单文件的exe-launcher启动Java应用程序
据我了解,该解决方案是exe-launcher将在应用程序启动时请求扩展执行。这并不是我想要的,因为对于我的用例,如果有可用的更新而不是在每个应用程序启动时,获取扩展权限就足够了。
通过调用本机可执行文件执行更新操作
可以调用本机可执行文件以使其执行更新操作。这样,应用程序仅在有可用更新时才请求扩展权限。听起来不错,但是其中包括一些Windows的本机编码,在其他平台上不起作用。
在程序文件夹中安装启动器,在用户主目录中安装应用程序
可以将启动器放置在程序文件夹中,该程序文件夹调用在用户主目录中安装的应用程序。这样,可以更新用户主文件夹中的应用程序。我使用InnoSetup在Windows上安装应用程序,据我所知,使用此安装程序以及其他安装程序很难实现拆分安装。
在用户的主目录中安装完整的应用程序,因为用户对其主目录
具有写访问权,所以完全没有问题。对我来说,这似乎是其简单性的最佳选择。