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

企业环境中的自动更新(C#),c#,.net,auto-update,C#,.net,Auto Update,我有一个安装在公司环境中的三层应用程序。每次服务器版本更新时,所有客户端也必须更新。目前,我提供了一个通过Active Directory自动部署的MSI包,但是我的客户(大多每个客户有20-300个用户)似乎不喜欢MSI解决方案,因为它是 运行起来很复杂(很少了解Active Directory) 当检测到新版本时,服务器无法触发更新过程 客户不能同时安装多个版本的客户端(如2.3和2.4)与不同的服务器通话 更新过程本身并不总是像预期的那样工作(有时在几个小时后会有非常奇怪的行为自我修复)

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

  • 运行起来很复杂(很少了解Active Directory)
  • 当检测到新版本时,服务器无法触发更新过程
  • 客户不能同时安装多个版本的客户端(如2.3和2.4)与不同的服务器通话
  • 更新过程本身并不总是像预期的那样工作(有时在几个小时后会有非常奇怪的行为自我修复)
我现在已经用ClickOnce做了一些实验,但是这种方法对我来说是不灵活的,并且很难集成到我的自动构建过程中。此外,它还会产生一些神秘的错误消息,这肯定会让我的客户感到困惑

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


您知道一种“只起作用”的更新方法吗?

您可以复制ClickOnce的功能,只需根据您的需要进行调整即可

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


    我希望这会有所帮助。

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

    您不认为本地应用程序数据是部署应用程序的文件夹,但Google是这样做的。它的Chrome浏览器就是这样安装在Windows上的,它的自动更新过程甚至是不可察觉的(这听起来很可怕)。那么,为什么不为受限用户将应用程序部署到此文件夹中呢?你可以在这里找到更多关于Chrome安装程序的信息


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

    我写了一个开源解决方案来满足我们对WinForms和WPF应用程序的特定需求。总体思路是以尽可能低的开销获得最大的灵活性。它应该为您描述的所有内容提供所需的所有灵活性

    因此,集成非常简单,库可以为您完成几乎所有的事情,包括同步操作。它也是高度灵活的,可以让你决定执行什么任务,在什么条件下执行——你可以制定规则(或者使用一些已经存在的规则)。最后,同样重要的是支持任何更新源(web、BitTorrent等)和任何提要格式——任何未实现的内容都可以自己编写

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

    这可以归结为一个DLL,大小小于70kb

    详情请浏览

    代码位于(根据Apache 2.0许可证许可)


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

    请澄清您在ClickOnce中遇到的错误以及在什么步骤中遇到的错误(因为这是解决您问题的好方法,也许我们可以修复)。ClickOnce为我们提供了帮助。至于“神秘”的错误消息。我只在我的应用程序被mage错误配置时见过这些。