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