更新产品的最佳方式

时间:2009-12-15 10:39:40

标签: auto-update

某些背景:

我们提供了一个由大型数据库和多个程序组成的复杂系统 - 大多数是用C#编写的,但是一些遗留应用程序仍在MFC上运行。

我们提供的大部分内容都在一台服务器上运行(运行SQL Server和SQL Management Studio 2005),但是有些应用程序可以在多台客户端的计算机上运行。更新这是一个真正的痛苦,因为在我们更新数据库之后,过时的软件可能会因数据库更改而中断。手动更新服务器软件是一回事,但确保所有客户端软件也能正常工作几乎是不可能的,并且只会随着时间的推移而变得更糟。

我要编写一个更新服务,它将能够更新整个产品 - 更新数据库,重新安装服务和应用程序。 (但是只应更新实际修改的程序/文件/表/等。每次有可用更新时下载整个产品不是一种选择。此外,某些计算机可能只安装了可用程序的子集)< / p>

首先,有一个很好的方法吗?如果有一些类似于ClickOnce的东西也可以更新已经存在的数据库,我宁愿使用它。

如果没有,更新时的最佳做法是什么?所有和任何材料将不胜感激。

我需要在提交更新后尽快在服务器上安装一些更新,而无需任何用户输入。这包括一个Windows服务(始终在运行)和任何数据库更改。完成这些更改后,我将不得不阻止任何不是最新的软件访问已更改的部件或根本不运行的部件。

我们将非常感谢任何建议 - 如果我必须编写这样的系统,我想做得对。

2 个答案:

答案 0 :(得分:1)

最佳做法是将应用程序打包在MSI中,并使用组策略将更新推送到每个客户端。

如果那是不可能的,那么你需要一些通知客户端应用程序它已经过时的方法(对持有当前版本号的服务器的简单检查可能就足够了)并且在下载更新补丁之前拒绝工作并安装 - 您甚至可以从应用程序内部启动此过程。

答案 1 :(得分:0)

This回答可能会对您有所帮助,我个人并未亲自使用Wix,但这似乎与您所寻求的一致。请务必查看linked tutorial中的第4课,因为这会提供您需要的详细信息。

我不确定在更新时你会在哪里找到最佳实践,但在我个人看来,你不应该强迫用户更新,除非它打破了底层应用程序(就像你的那样)。如果某人有关于此主题的最佳实践列表的链接,我将非常感兴趣。

修改

我对可能的更新最佳做法感兴趣所以我开始了另一个问题线程here。答案中的一般共识是“询问用户/客户”,但答案中可能还有一些其他细节可能对您有所帮助,我恐怕无法在任何地方找到任何关于该主题的实际硬规则(我期待着。)