自动更新Windows服务

Lar*_*ken 16 windows-services auto-update

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

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

我目前的计划是:

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

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

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

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

谢谢!

Ben*_*old 13

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

  • 由于可以更新任一服务,因此两个服务都将充当另一个服务的更新者.服务A将更新服务B,反之亦然.因此,我建议您始终只运行这两项服务.除非您担心使用do-update-exist调用真正加载服务器,否则启用/禁用服务管理不值得花费.

  • 像服务一样无法在一台机器上安装.换句话说,如果它们具有相同的名称,则无法并排安装新旧版本的服务.除非您想使更新过程复杂化,否则我建议您卸载旧版本,然后安装新版本.例如,服务A将下载服务B安装程序,卸载服务B,安装新版本的服务B,然后运行.服务B对服务A也会这样做.

  • 由于每个服务都在管理另一个服务,因此他们不仅要检查可用的更新,还应该验证彼此的健康状况.例如,服务A将检查服务B是否存在以及它是否正在运行.如果运行状况检查失败,则服务A将完成解决问题并使服务运行的步骤列表.执行运行状况检查和恢复操作现在将涵盖更新,初始安装或一般操作出现的问题.

  • 在客户端和服务器上进行充分的日志记录.您需要跟踪采取的操作和时间.例如,服务A可能在检查更新时,执行运行状况检查和相关操作时.在服务上(假设您正在调用寻求更新的Web服务)跟踪每个服务所做的调用.如果您的服务至少没有得到更新,那么您将面临一系列面包屑(或缺少面包屑)指向您的问题.

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

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

  • 谢谢回复.为什么我们不能停止服务.覆盖安装它的文件并启动服务.我们将覆盖除configs之外的所有文件.我想我们不需要再次卸载和安装它? (2认同)