4

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

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

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

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

您知道“正常工作”的更新方法吗?

4

4 回答 4

4

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

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

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

我希望这有帮助。

于 2008-09-15T20:04:50.757 回答
2

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

您不认为 Local Application Data 是部署应用程序的文件夹,但 Google 确实如此。它的 Chrome 浏览器在 Windows 上以这种方式安装,它的自动更新过程甚至是不引人注意的(这可能听起来很可怕)。那么为什么不将您的应用程序部署到此文件夹中以供受限用户使用呢?您可以在此处找到有关 Chrome 安装程序的更多信息,

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

于 2008-09-16T06:47:43.380 回答
2

这是我为解决我们对 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 许可下获得许可)

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

于 2010-08-24T22:40:30.593 回答
0

如果你不想给你的用户太多的权限,可以写一个 Windows 服务,它会在每台计算机上运行在具有适当权限的帐户下,并且可以在新版本可用时更新你的应用程序.

于 2009-11-25T19:57:46.237 回答