Java应用程序在Windows Vista及更高版本上自行更新

时间:2014-08-12 18:27:19

标签: java windows deployment upgrade updating

很长一段时间潜伏,最后成为一名成员。我有一个java应用程序,我准备向公众发布Windows / OSX / Linux但我遇到了与Windows Vista及更高版本的权限相关的问题。

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

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

  1. 下载更新
  2. 备份当前应用程序文件(存储在c:\ Program Files ....下的文件)
  3. 在当前应用程序文件顶部解压缩更新
  4. 清理(删除更新档案等)
  5. 重新启动主应用程序
  6. 存在问题。为了允许更新过程更改自己的文件,我需要授予JAR管理权限;这看起来很疯狂。有没有办法在这些允许默认更改自己的文件的操作系统上安装java应用程序?显然,不将应用程序安装到“Program Files”目录中工作得非常好 - 但大多数人将文件安装到这些目录中(因为这是他们的目的)。

    我一直试图找出这个问题的一个很好的解决方案已经有一个多星期了,但是我还是空手而归。我希望有人能够在这些操作系统上进行部署,这可以为这个主题提供一些启示。

    其他信息:

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

    也许我说这一切都错了?我不能成为第一个遇到此问题的人,有数百万个应用程序部署到Windows。

    感谢您的帮助和建议。

1 个答案:

答案 0 :(得分:0)

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

对于其他任何偶然发现此主题的人,还有其他信息;

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

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