公司环境中的自动更新(C#)

时间:2020-03-05 18:54:19  来源:igfitidea点击:

我有一个安装在公司环境中的三层应用程序。每次服务器版本更新时,所有客户端也必须更新。目前,我提供了一个可通过Active Directory自动部署的MSI程序包,但是我的客户(每个用户大多有20-300个用户)似乎讨厌MSI解决方案,因为它

  • 使它运行起来很复杂(很少有Active Directory知识);
  • 当检测到新版本时,服务器无法触发更新过程。
  • 客户不能同时安装多个版本的客户端(例如2.3和2.4)与不同的服务器通话;
  • 更新过程本身并不总是按预期方式工作(有时非常奇怪的行为会在几个小时后恢复自身)

现在,我已经对ClickOnce进行了一些实验,但是这种方式对我来说不灵活,而且很难集成到我的自动构建过程中。而且,它还会产生一些隐含的错误消息,这肯定会使我的客户感到困惑。

我自己编写更新逻辑不会有任何问题,但是问题是运行自更新应用程序的用户的权限太有限,无法执行更新。我发现他们可以写入本地应用程序数据目录,但是我认为这不是将应用程序文件安装到的典型位置。

我们知道一种"可行"的更新方式吗?

解决方案

回答

我们可以稍微复制ClickOnce的功能,只需根据需要进行调整即可。

  • 创建一个轻量级可执行文件,该文件检查网络/网站位置是否有更新。
  • 如果有更新,它将在本地复制它们并替换"实际"应用程序文件。
  • 它运行"实际"应用程序。

应用程序文件的位置应由权限和操作系统确定。如果用户仅对有限的一组文件夹具有写权限,那么我们别无选择,只能使用这些文件夹之一。另一个选择是提供一个初始安装软件包,该软件包将安装轻量级可执行文件并在特定文件夹(例如" C:\ Program Files \ MyApp")上授予r / w权限。这种方法通常需要IT部门的支持。

我希望这有帮助。

回答

确实很难为我们提供准确的答案,因为有关客户端安装程序的关键信息并不明确。我们是否将客户端文件安装到"程序文件"中?然后,当用户受到限制时,我们可能会遇到问题。

我们不认为本地应用程序数据是用于部署应用程序的文件夹,但是Google确实如此。它的Chrome浏览器以这种方式在Windows上安装,其自动更新过程甚至也不为人所知(这听起来很可怕)。那么,为什么不将应用程序部署到此文件夹中以供受限用户使用呢?我们可以在此处找到有关Chrome安装程序的更多信息,

http://robmensching.com/blog/archive/2008/09/04/Dissecting-the-Google-Chrome-setup.aspx

回答

如果我们不想给用户太多的权限,则可以编写Windows服务,该服务将在具有适当特权的帐户下在每台计算机上运行,​​并且在有新版本可用时可以更新应用程序。

回答

这是我为满足WinForms和WPF应用程序的特定需求而编写的开源解决方案。总体思路是,以最低的开销获得最大的灵活性。它应该为我们提供了所描述的所有灵活性。

因此,集成非常容易,该库几乎可以为我们做所有事情,包括同步操作。它也非常灵活,可以让我们确定要执行的任务以及在什么条件下制定规则(或者使用已经存在的条件)。最后,同样重要的是,它支持任何更新源(Web,BitTorrent等)和任何提要格式(无论未实现的内容),我们都可以自己编写。

还支持冷更新(要求应用程序重新启动),并且自动完成,除非为任务指定了"热交换"。

这可以归结为一个小于70kb的DLL。

有关更多详细信息,请访问http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/

代码位于http://github.com/synhershko/NAppUpdate(在Apache 2.0许可下获得许可)

我打算在有更多时间的时候进一步扩展它,但是老实说,无论当前它不支持什么,我们都应该能够自己快速增强它。