自动更新

7
我有一个系统,包括两个Web应用程序、一个Web服务、一个Windows服务和一个WPF应用程序,在一个触摸屏上每天24小时运行,并且它们都连接到一个数据库。
我想要能够通过将升级文件上传到数据库并设置升级发生的日期和时间来升级所有这些应用程序。
我有一个关于如何做到这一点的想法。
  1. 一个应用程序在运行线程以查找可用的升级。
  2. 当找到升级时,文件会下载到应用程序的计算机上。
  3. 下载完成后,应用程序会触发重启。
  4. 应用程序启动时,它会在本地计算机上查找升级文件。
  5. 如果升级可用,则应用程序会自行升级。
我还不确定所有这些步骤应该如何实现,特别是最后一步。但我希望对此进行评论。这样做完全错误吗?我是否走在正确的轨道上?是否有其他方法可以这样做或者有什么提示呢?

1
是的,你的方法可行。根据升级文件的大小,我可能不会将其存储在数据库中,但这只是一个小问题。 - Piskvor left the building
Piskvor说得对,你不想把它存储在数据库中。我在下面发布了一个答案,告诉你关于ClickOnce的事情。 - Bronumski
如果更新失败,我也会考虑回滚的方法!特别是如果您无法物理访问设备。 - chriszero
我们的要求是所有应用程序都必须连接到数据库。但我们不能假设所有应用程序都连接到互联网。这是医院的医疗系统,例如触摸屏位于当地病房。它们连接到医院网络中央数据库,但只能在某些情况下访问网络外部。 - Peter Hedberg
我想在数据库中完成这个操作的原因之一是我想为每个客户进行升级 - 只要有可用的升级,我们并不希望所有客户都进行升级。 - Peter Hedberg
显示剩余2条评论
6个回答

2
我认为你正在正确的方向上。一个轮询应用程序来检查数据库是否存在新的更新,然后是一个xcopy部署脚本就可以了。
这也可以通过PowerShell脚本完成,每10分钟运行一次。它可以检查数据库,关闭进程和服务,xcopy应用程序(从共享源),并重新启动该服务和应用程序。
所有这些都假定您最初没有使用Windows Installer来打包和部署应用程序。虽然将二进制文件直接替换为xcopy不会损害MSI软件包,但不建议这样做。我们在工作中使用AD MSI部署,有时候很麻烦!
MSDN包含有关WPF应用程序的MSI vs XCopy部署的参考信息(以及安全要求)。
这是我找到的第一个使用PowerShell查询SQL的链接:http://elegantcode.com/2008/03/27/discovering-windows-powershell/ 祝好运!

1

使用ClickOnce可能会遇到麻烦。ClickOnce只适用于您的WPF应用程序,无法处理服务或Web应用程序。您可以编写一个单独的ClickOnce部署的“更新器”应用程序,其工作是更新其他应用程序,但这仍然似乎有点靠不住。

听起来可能很愚蠢,但我会从我能想到的最简单的事情开始。使用Dropbox推送您的更新文件;然后是一个AutoHotKey脚本,在启动时运行,监视新的更新文件夹并运行它们?

听起来有点牵强,但您可以在一两个小时内证明它可行。


0

0

你真的想从数据库运行更新,还是这只是一个可能的解决方案?你正在重复造轮子。

看看ClickOnce部署,你需要的一切都已经为你完成并集成到VisualStudio中。如果你使用已经存在的东西,你就可以获得现有文档、那些已经经历过痛点、更新和修复的人们的有用博客的好处。

ClickOnce Deployment

.NET Framework 2.0中的ClickOnce部署

你如何使用ClickOnce取决于你想从中获得什么。开箱即用,你可以非常容易地创建一个部署,每次运行应用程序时都会检查升级,但你也可以通过一点代码让应用程序在运行时检查更新。

Dominic Zukiewicz提到的Updater Application BlockVersion是ClickOnce的前身。

编辑

ClickOnce在服务器端和客户端都提供了回滚的情景。客户端可以使用普通的添加/删除程序对话框回滚到先前的版本,您也可以轻松地重新发布先前的版本。


听起来不错。但是我认为在我的情况下有些事情不适用。它适用于我们所有的应用程序类型(Web、WPF、服务)吗?所有应用程序都需要互联网访问吗?不能选择要升级的系统安装吗?也许我在某些方面是错误的。 - Peter Hedberg
抱歉,我错过了“我想能够升级所有这些应用程序”的部分。简短的回答是否定的,您可以使用ClickOnce来进行客户端应用程序的升级。如果您希望以相同的方式升级所有应用程序,则可能需要重新考虑您的部署策略,因为很少有一种解决方案适用于所有情况。我可以说的是,从经验上看,当部署到最终用户时,ClickOnce是一个非常好的部署工具,所有问题都已经解决,并提供了非常好的用户体验。 - Bronumski
我会进一步调查。任何事情都比我们今天所做的更好——使用VPN和远程桌面连接到所有需要的服务器,以及开车去那些我们没有VPN访问权限的客户那里。 - Peter Hedberg

0
您可以创建另一个Windows服务,每天进行更新。该服务将查看特定文件夹是否有任何需要处理的更新。例如,它可以查找一个XML文件,告诉它应用程序的新版本以及要更新的文件。它将关闭应用程序/服务,备份需要更新的文件,启动应用程序/服务,并清理备份文件,保留至少三个备份文件。该服务应该跟踪已安装的上一个和当前版本,以便在读取XML文件时可以检查是否为新更新,或者在完成后可以简单地删除XML文件。

0

Google Omaha怎么样?它是一个开源工具,目前用于推送Google Chrome和Google Earth的更新。Omaha也可以处理应用程序安装。可以在这里找到高级设计概述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接