自动更新Windows服务

时间:2009-07-07 15:23:25

标签: windows-services auto-update

我即将开发一个程序,该程序将作为Windows服务在几个客户端的后端服务器(具有Internet访问权限)上安装和运行。我没有物理访问服务器。我正在研究的是一个可靠地推出程序更新的方案。

我花了很多时间寻找Windows服务自动更新的最佳做法,但却找不到有用的信息。大多数技术,例如ClickOnce,似乎主要适用于基于Windows Forms的应用程序。

我目前的计划是:

  • 如果有可用更新,请让正在运行的服务下载,安装并启动更新服务。
  • 更新服务将下载新版本的主服务,并将其安装在当前仍处于活动状态的版本旁边。
  • 更新服务接下来停止旧版本,然后启动新版本的服务。
  • 新版本在启动期间禁用更新服务。

对我来说,一些重要的问题是:

  • 能够处理主服务和更新服务的更新
  • 能够在更新过程中随时处理电源故障或连接失败等中断

令人疑惑的是,这是解决这个问题的常用方法和/或我是否遗漏任何关键问题。这太复杂了,还是太简单了?你会怎么做(或者,更好的是,你是如何成功完成的?)

谢谢!

1 个答案:

答案 0 :(得分:13)

去年我遇到了同样的问题,我也遇到了很多相同的问题。一些建议:

  • 由于任何一项服务都可能会更新, 两种服务都将起到作用 另一个更新者。服务A意志 更新服务B,反之亦然。对于 这个原因,我建议干脆跑 这两项服务始终如一。除非 你担心真的加载 用你的服务器 更新存在的调用, 启用/禁用服务管理 不值得开销。

  • 喜欢的服务无法安装在 单机。换句话说,你 无法安装新旧版本 服务并排,如果他们有 同名。除非你要 我的更新过程复杂化了 建议您卸载旧版本 然后安装新版本。 例如,服务A将下载 服务B安装程序,卸载 服务B,安装新版本 服务B然后运行。服务B. 对服务A也会这样做。

  • 由于每项服务都在管理 另外,他们不仅要检查 可用的更新,但他们应该 验证对方的健康状况。对于 例如,服务A会检查以查看 如果服务B存在且是否存在 运行。如果健康检查失败, 解决问题的步骤列表 并获得运行的服务 由服务A完成。执行 健康检查和恢复操作 现在将覆盖你的问题 随着更新,初始产生 安装或一般操作。

  • 在客户端上进行充足的日志记录 和服务器。你想跟踪 采取了什么行动以及何时采取 例如,服务A可能就是它 正在检查更新 执行健康检查和 相关行动。在服务上 (假设你正在调用网络 服务寻找更新)跟踪 每个服务的电话。如果 您的服务未获得更新 至少你会有一丝痕迹 面包屑(或没有面包屑) 指出你的问题。

这种解决方案有很多潜在的问题:服务没有在启动时运行,UAC阻碍,无法使用同一用户安装和卸载服务,确保用户安装服务有充足的权限,连接丢失,在客户端计算机上安装.NET Framework,必要时在安装后处理重新启动等等。

祝你好运。这是一个有趣的问题需要解决,但它不会没有它的挫败感 - 特别是因为,正如你所说,没有很多记录的信息可用。