【问题标题】:Java application updating itself on Windows Vista and higherJava 应用程序在 Windows Vista 和更高版本上自我更新
【发布时间】:2014-08-12 18:27:18
【问题描述】:

潜伏了好久,终于来了。我有一个 Java 应用程序,我正准备向公众发布 Windows/OSX/Linux,但我遇到了与 Windows Vista 和更高版本权限相关的问题。

基本上,应用程序安装到标准的 c:\Program Files(可在安装程序中配置),这很好,我的应用程序数据存储在用户各自的应用程序数据文件夹中。

现在这是我正在努力解决的部分。我的应用程序(与大多数应用程序一样)能够检查更新并自行更新。更新过程执行以下步骤;

  1. 下载更新
  2. 备份当前应用程序文件(存储在 c:\Program Files.... 下的应用程序文件)
  3. 在当前应用程序文件之上解压缩更新
  4. 清理(删除更新存档等)
  5. 重启主应用程序

问题就在于此。为了允许更新进程更改自己的文件,我需要授予 JAR 管理权限;这似乎很疯狂。有没有办法在这些默认允许更改自己的文件的操作系统上安装java应用程序?显然,不将应用程序安装到“程序文件”目录中工作得很好——但大多数人将文件安装到这些目录中(因为这是他们的目的)。

一个多星期以来,我一直在努力寻找解决这个问题的好方法,但可惜我总是空手而归。我希望这里有在这些操作系统上部署经验的人可以对这个话题有所了解。

附加信息:

  • 应用程序结构是一个可执行 jar,带有一个 jar 的 lib 文件夹,一个带有 lib 文件夹的更新程序可执行 jar
  • JWS 无法满足我的需求
  • 这仅在 Windows Vista 及更高版本上存在问题,Windows XP 运行良好,因为它没有 UAC 机制
  • 应用程序会提示用户有可用的升级以及升级包含的内容。

也许我做错了?我不是第一个遇到这个问题的人,有数百万个应用程序部署到 Windows。

感谢您的帮助和建议。

【问题讨论】:

  • 谁会允许某些程序在不请求权限的情况下“自我更新”(并可能验证更新是否有害)?您可能会查看“msi 打包”您的应用程序,定期检查更新,并通知用户运行更新过程。
  • 对不起,我应该说应用程序会提示用户他们是否要接受升级,这也会告诉他们新版本中有什么可用的。这不是静默升级。

标签: java windows deployment upgrade updating


【解决方案1】:

简短的回答是NO如果没有正确的权限,您的应用程序无法更改自己的文件。

对于其他偶然发现此主题的人,这里有更多信息;

  • 如果您想写入系统文件(例如 c:\Program Files),并且您的应用程序尚未以管理员权限运行,则必须提示您从 UAC 提升权限。
  • 如果您的应用程序仅为特定用户安装,另一种方法可能是将您的应用程序仅安装到特定用户的本地文件,因此可以更新。

解决方案? 由于我的应用程序在运行时不需要提升权限,因此我以标准方式运行应用程序,但如果有可用更新,我会提示用户提升权限。我的应用程序调用了一个处理升级的外部 jar(或 Windows 中的 exe),所以我最后要做的就是将正确的 Manifest 添加到 upgrade.exe 和 viola。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 2011-05-08
    • 1970-01-01
    • 2015-08-18
    • 2015-03-04
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多