【问题标题】:Self Updating Application自我更新应用程序
【发布时间】:2010-12-12 20:48:00
【问题描述】:

我有一个关于小组的一般性问题。我即将为我的团队启动一个大型项目,我怀疑我们将作为桌面应用程序进行(在我的应用程序前景中,我通常是一个网络人,但我愿意改变。)

我最担心的是,公司中当前的桌面应用程序已经很难维护,或者更重要的是,在需要进行更改时分发。所以我想开发一些东西来提示用户(我们的员工)在他们的计算机上过时时更新软件。

如果你们之前做过这件事,我将不胜感激任何关于要注意哪些陷阱的建议。此外,我会对任何人发现有助于解决类似要求的任何在线资源感兴趣。

谢谢。

编辑:我意识到我很烂!!我确实忘记提及一些最重要的细节。它将是一个 Window 应用程序,使用 .NET 框架编写,面向 Win XP 及更高版本。

【问题讨论】:

  • 平台?语言?框架?
  • 对不起。我的错。当天晚些时候。 =( 这将是一个 Windows 平台,使用 .NET Framework 编写,面向 Windows XP 或更高版本。
  • 那么也许我应该删除我的答案。
  • @GameFreak:一切都很好

标签: .net desktop-application


【解决方案1】:

如果您想自己实现它,也很容易。我们的应用程序使用大致以下 API 定期轮询 Web 服务以获取信息:

getVersion(Installation ID): returns release version to be installed and hash of all files
getFileList(Version ID): gets a list of files and file hashes for the release
getFile(File ID): gets one file

优点:通过将逻辑编码到您的 getVersion 方法中,您可以将不同的版本推送给不同的客户,它还允许您首先将 beta 版本推送给有限数量的客户。

检查所有下载文件的哈希值可确保您的应用程序正确下载文件。这也可用于修复损坏的应用程序文件。当发布的哈希与所有下载文件的哈希匹配时,就可以安装了。

要安装,请让您的主程序启动更新应用程序并退出。更新应替换所有更改的应用程序文件。更新程序还可以运行与发布相关的任何 SQL 更改脚本或注册表更改。

在更新程序结束时,再次启动您的主应用程序,并让主应用程序根据需要更新更新程序。它们相互更新,因此您可以将错误修复推送到更新程序和主应用程序。

我还建议在向客户发布新版本之前测试降级,以便在发现任何严重错误时自动切换到旧的稳定版本。

【讨论】:

  • 我对此很感兴趣。链接在哪里?
  • 那个应用程序不是开源的,所以我不能提供它的链接。
  • 这不是问题的答案。为什么它被标记为答案?
  • 不管链接与否,都是对问题的回答?你会用这个链接做什么?
【解决方案2】:

正如 Daniel 所说,由于您使用的是 .NET,Windows ClickOnce 应该可以正常工作。

另一种选择是使用Shadow Copying。基本上告诉你的程序集从不同的位置执行到它们安装的位置。这将允许您的应用程序更新自己的文件,即使程序集已加载。我自己之前没有使用过这个,但已经看到它演示了几次。

ClickOnce 将是一个更简单的解决方案,除非您有一些它无法满足的需求,否则我会这样做。 ClickOnce 将允许您将应用程序发布到 Web 服务器或网络共享,并允许您的用户在新版本可用时自动更新他们的副本。它会从内存中自动检查并在用户尝试启动应用程序时提示用户。

【讨论】:

  • ClickOnce 有自己的安全沙箱版本。确保您尝试执行的操作 ClickOnce 允许您执行此操作。即使完全信任,您可能仍然无法做某些事情。上次我尝试时,ClickOnce 不允许我修改安装我的应用程序特定协议所需的注册表设置——完全是一个阻碍。
【解决方案3】:

我们所做的是;当应用程序启动时或每小时左右我们向我们的网络服务器发出 GET 请求。

http://www.domain.com/app/versionCheck.php?app=APP_NAME&version=2.1.1.1

脚本检查数据库并比较版本。如果版本不同,则将“UPGRADE”发送回实用程序,否则返回“GOOD”

如果实用程序收到“UPGRADE”,它会将用户发送到预定的 URL 以下载该实用程序的最新版本。

这适用于较小的实用程序 (

建议

  • 如果没有互联网连接来检查版本,请不要告诉他们只是超时并等待一个可用。如果 + 25 超时然后告诉用户。
  • KISS,您不需要在响应中包含升级 URL,只需将它们发送到预定义的 URL。

【讨论】:

    【解决方案4】:

    您尚未指定您使用的语言/平台/框架,但我建议使用内置此功能的语言/平台/框架。

    Microsoft 有 ClickOnce 部署,我知道 Adob​​e Air does something similar。这是一个关于拥有 auto-update functionality in Java 的 SO 问题。

    【讨论】:

      【解决方案5】:

      您没有指定目标操作系统,但在 OS X 上,我认为很容易添加的一个不错的选择是 Sparkle

      【讨论】:

        猜你喜欢
        • 2015-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        • 1970-01-01
        • 2012-03-31
        • 2012-02-15
        • 2011-05-15
        相关资源
        最近更新 更多