代码之家  ›  专栏  ›  技术社区  ›  Peter Lange

自更新应用程序

  •  8
  • Peter Lange  · 技术社区  · 15 年前

    我有一个小组的一般性问题。我正准备为我的团队启动一个大型项目,我怀疑,我们将作为一个桌面应用程序来做(在我的应用程序展望中,我通常是一个网络人,但我愿意改变。)

    我最大的担心是,公司目前的桌面应用程序已经让Keister难以在需要进行更改时维护或更确切地说是分发。因此,我想开发一些东西,如果用户(我们的员工)的计算机上的软件过期,它会提示用户更新软件。

    你们这些以前做过这件事的人,我会很感激任何关于要注意哪些陷阱的建议。此外,我对任何人发现有助于满足类似要求的在线资源都感兴趣。

    谢谢。

    编辑:我意识到我很差劲!!我确实忘了提到一些最重要的细节。它将是一个窗口应用程序,使用.NET框架编写,目标是WinXP和更高版本。

    5 回复  |  直到 15 年前
        1
  •  13
  •   Ztranger    15 年前

    如果你想自己实现它,这也很容易。我们的应用程序使用以下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
  •  5
  •   Glenn    15 年前

    正如丹尼尔所说,由于您使用的是.NET和Windows,ClickOnce应该对您很好。

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

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

        3
  •  3
  •   Steven Smethurst    15 年前

    我们所做的是:当应用程序启动时,或者每小时左右,我们向我们的Web服务器发出一个GET请求。

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

    脚本检查数据库并比较版本。如果版本不同,“升级”被发送回实用程序,其他方面则为“好”

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

    这适用于较小的公用设施(<20MB)。

    建议

    • 如果没有互联网连接来检查版本,不要麻烦告诉他们只是超时等待一个可用的版本。如果+25超时,则告诉用户。
    • kiss,您不需要在响应中包含升级URL,只需将它们发送到预先定义的URL即可。
        4
  •  2
  •   Community CDub    8 年前

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

    微软有 ClickOnce 部署,我知道Adobe Air does something similar . 这里有一个关于 auto-update functionality in Java .

        5
  •  2
  •   GameFreak    15 年前

    您没有指定目标操作系统,但在OS X上,一个很好的选择是 Sparkle .

    推荐文章