我对这个小组有一个普遍的问题。我即将为我的团队启动一个大型项目,我怀疑,我们将作为桌面应用程序(我通常是我的应用程序前景中的网络人员,但我愿意改变。)
我最担心的是,当需要进行更改时,公司当前的桌面应用程序已经很难维护,或者更重要的是要分发。所以我想开发一些东西,促使用户(我们的员工)在他们的计算机上过时更新软件。
那些之前已经做过这件事的人,我将不胜感激任何关于需要注意的陷阱的建议。此外,我对任何有助于解决类似要求的在线资源感兴趣。
感谢。
编辑:我意识到我很糟糕!我忘了提一些最重要的细节。它将是一个使用.NET框架编写的Window应用程序,目标是Win XP及更高版本。答案 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)。
建议
答案 3 :(得分:2)
您尚未指定您正在使用的语言/平台/框架,但我建议您使用内置此功能的语言/平台/框架。
Microsoft已部署ClickOnce,我知道Adobe Air does something similar。这是一个关于拥有auto-update functionality in Java的问题。
答案 4 :(得分:2)
您没有指定目标操作系统,但在OS X上,我认为非常容易添加的一个很好的选择是Sparkle。