自我更新申请

时间:2009-11-04 00:43:13

标签: .net desktop-application

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

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

那些之前已经做过这件事的人,我将不胜感激任何关于需要注意的陷阱的建议。此外,我对任何有助于解决类似要求的在线资源感兴趣。

感谢。

编辑:我意识到我很糟糕!我忘了提一些最重要的细节。它将是一个使用.NET框架编写的Window应用程序,目标是Win XP及更高版本。

5 个答案:

答案 0 :(得分:13)

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

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方法中,您可以将不同版本推送给不同的客户,并且还允许您首先将测试版推送给有限数量的客户。

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

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

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

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

答案 1 :(得分:5)

由于你正在使用.NET和Windows ClickOnce应该可以正常工作,正如丹尼尔所说。

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

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

答案 2 :(得分:3)

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

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

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

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

这适用于较小的实用程序(< 20mb)。

建议

  • 如果没有互联网连接来检查版本,请不要告诉他们只是暂停并等待其中一个可用。如果超过25次,则告诉用户。
  • KISS,您无需在响应中拥有升级网址,只需将其发送到预定义的网址即可。

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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