2010-09-20 131 views
5

我有一个系统,在触摸屏上每天24小时运行两个Web应用程序,一个Web服务,一个Windows服务和一个WPF应用程序。所有这些都连接到数据库。自动更新

我希望能够升级所有这些应用程序,方法是将升级文件上载到数据库并设置升级发生的日期和时间。

我对如何做到这一点有一个想法。

  1. 应用程序有一个线程正在运行以查找可用的升级。
  2. 当找到升级时,文件被下载到应用程序的计算机。
  3. 下载完成后,应用程序会触发重新启动。
  4. 当应用程序启动时,它会在本地计算机上查找升级文件。
  5. 如果升级可用,应用程序将自行升级。

我不太确定所有这些步骤应该如何完成,尤其是最后一步。但我想对此有一些评论。这完全错了吗?我在正确的轨道上吗?任何提示如何做到这一点或以其他方式?

+1

是的,你的方法是可行的。根据升级文件的大小,我可能不会将它存储在数据库中,但这只是一个挑剔。 – Piskvor 2010-09-20 07:07:20

+0

Piskvor是对的,你不想把它存储在数据库中。我在下面发布了一个答案,告诉您关于ClickOnce的信息。 – Bronumski 2010-09-21 12:33:31

+0

我也会考虑一种回滚的方式,以防更新失败!特别是如果你没有物理访问设备。 – chriszero 2010-09-21 12:42:49

回答

1

我想你会在这里走对了。轮询应用程序检查数据库是否存在新的更新,然后是xcopy部署脚本。

这也可以通过PowerShell脚本实现,该脚本按计划运行,例如每10分钟运行一次。它可以检查数据库,关闭进程和服务,xcopy应用程序(从共享源)并重新启动所述服务和应用程序。

这一切都假定您最初并未使用Windows Installer打包和部署应用程序。虽然直接替换二进制文件的xcopy不会伤害MSI软件包,但不推荐使用。我们在工作中使用AD MSI部署,在最好的时候这是一种痛苦!

MSDN包含用于WPF应用程序的MSI和XCopy部署的引用(以及安全要求)。

这是第一个链接,我发现从PowerShell的SQL查询:http://elegantcode.com/2008/03/27/discovering-windows-powershell/

祝你好运!

0

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

看看ClickOnce部署,您需要的一切已经完成并集成到VisualStudio中。如果你使用已经存在的东西,你可以从现有的文档中获益,也可以获得已经经历过痛点,更新和修复的人的博客。

ClickOnce Deployment

ClickOnce Deployment in .NET Framework 2.0

你想怎么使用的ClickOnce取决于你想摆脱它是什么。开箱即用,您可以非常轻松地创建一个部署,每次运行应用程序时都会检查升级,但您也可以使用一小段代码让应用程序在运行时检查更新。

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

编辑

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

+0

听起来不错。但我认为有些事情在我的情况下不起作用。对于我们所有的应用程序类型(Web,WPF,服务)来说,它是否有用?需要互联网访问所有应用程序?无法选择要升级的系统安装?我在这里可能是错的。 – 2010-09-22 08:12:07

+0

抱歉,我错过了“我希望能够升级所有这些应用程序”。简短的答案是否定的,您可以使用ClickOnce作为客户端应用程序。如果您希望以与重新考虑部署策略相同的方式升级所有应用程序,那么很少有适合所有解决方案的解决方案。我可以说的是,从部署到最终用户的体验出发,ClickOnce是一个非常好的部署工具,所有工作都已经完成并提供了非常好的用户体验。 – Bronumski 2010-09-22 08:54:51

+0

我会再看看它。任何事情都比我们今天所做的更好 - 为我们所需的所有服务器提供VPN和远程桌面,并向我们没有VPN访问权限的客户提供服务。 – 2010-09-22 08:58:20

1

您在使用ClickOnce时会遇到麻烦。 ClickOnce只能用于您的WPF应用程序,它无法对服务或Web应用程序执行任何操作。您可以编写一个单独的ClickOnce部署的“更新程序”应用程序,其工作是更新其他应用程序,但这似乎还有点儿不足。

这听起来很愚蠢,但我会从我能想到的最简单的事情开始。如何使用Dropbox来推送更新文件;那么在启动时运行一个AutoHotKey脚本,观察Dropbox文件夹中的新更新并运行它们?

听起来很有趣,但它可以在一两个小时内证明出来。

0

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

0

Google Omaha怎么样?它是一款开源工具,目前用于推送Google Chrome和Google地球的更新。奥马哈也可以处理应用程序安装。高层次的设计概述可以在here找到。