企业环境中的自动更新(C#)

时间:2008-09-15 19:33:43

标签: c# .net auto-update

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

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

我现在已经使用ClickOnce做了一些实验,但这种方式对我来说不灵活,而且很难集成到我的自动构建过程中。此外,它会产生神秘的错误信息,这肯定会让我的客户感到困惑。

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

你知道一种“正常工作”的更新方法吗?

4 个答案:

答案 0 :(得分:4)

您可以在某种程度上复制ClickOnce所做的事情,只需根据您的需要进行调整。

  1. 创建一个轻量级可执行文件,用于检查网络/ Web位置以获取更新。
  2. 如果有更新,它会在本地复制它们并替换“真正的”应用程序文件。
  3. 它运行“真正的”应用程序。
  4. 应用程序文件的位置应由权限和操作系统确定。如果用户只对一组有限的文件夹具有写入权限,则您无法选择,而是使用其中一个文件夹。另一个选项是提供一个初始安装包,用于安装轻量级可执行文件并授予特定文件夹(如“C:\ Program Files \ MyApp”)的r / w权限。这种方法通常需要IT人员的支持。

    我希望这会有所帮助。

答案 1 :(得分:2)

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

您不认为本地应用程序数据是部署应用程序的文件夹,但谷歌确实如此。它的Chrome浏览器在Windows上以这种方式安装,其自动更新过程甚至无法察觉(这可能听起来很糟糕)。那么为什么不将应用程序部署到受限用户的此文件夹中?您可以在此处找到有关Chrome安装程序的更多信息,

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

答案 2 :(得分:2)

这是我为满足WinForms和WPF应用程序的特定需求而编写的开源解决方案。一般的想法是尽可能以最低的开销获得最大的灵活性。它应该为您所描述的所有内容提供所需的所有灵活性。

所以,集成非常容易,而且库可以为您完成一切,包括同步操作。它也高度灵活,让您确定要执行的任务以及在什么条件下 - 您制定规则(或使用已经存在的规则)。最后一点是对任何更新源(web,BitTorrent等)和任何 Feed格式的支持 - 任何未实现的内容,您都可以自己编写。

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

这可以归结为一个DLL,大小不到70kb。

http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/

的更多详情

代码位于http://github.com/synhershko/NAppUpdate(根据Apache 2.0许可证授权)

我计划在我有更多时间的时候扩展它,但老实说,你应该能够自己快速增强它,无论它目前不支持什么。

答案 3 :(得分:0)

如果您不想为用户授予太多权限,则可以编写Windows服务,该服务将在具有相应权限的帐户下的每台计算机上运行,​​并且可以更新您的应用程序。版本可用。