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

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

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

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

您知道一种“有效”的更新方法吗?

有帮助吗?

解决方案

您可以在某种程度上复制 ClickOnce 的功能,只需根据您的需要进行调整即可。

  1. 创建一个轻量级可执行文件来检查网络/Web 位置是否有更新。
  2. 如果有更新,它将在本地复制并替换“真实”应用程序文件。
  3. 它运行“真正的”应用程序。

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

我希望这有帮助。

其他提示

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

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

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

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

所以, 一体化 非常简单,该库几乎可以为您完成所有操作,包括同步操作。也是 高度灵活, ,并让您确定要执行哪些任务以及在什么条件下执行 - 您制定规则(或使用一些已有的规则)。最后同样重要的是对以下方面的支持 任何更新源 (网络、BitTorrent 等)和任何 饲料格式 - 无论未实现的内容,您都可以自己编写。

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

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

更多详情请参见 http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/

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

我计划在有更多时间时进一步扩展它,但老实说,您应该能够自己快速增强它,以应对它目前不支持的任何内容。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top