Windows services 自动更新Windows服务

Windows services 自动更新Windows服务,windows-services,auto-update,Windows Services,Auto Update,我将要开发一个程序,该程序将作为Windows服务安装并运行在多个客户端的后端服务器(可访问internet)上。我没有对服务器的物理访问权限。我正在研究的是一个可靠地发布程序更新的方案 我花了相当多的时间寻找Windows服务自动更新的最佳实践,但发现很少有用的信息。大多数技术,如ClickOnce,似乎主要针对基于Windows窗体的应用程序 我目前的计划是: 当更新可用时,让正在运行的服务下载、安装并启动更新服务 更新服务将下载主服务的新版本,并与当前仍处于活动状态的版本并行安装 更新服

我将要开发一个程序,该程序将作为Windows服务安装并运行在多个客户端的后端服务器(可访问internet)上。我没有对服务器的物理访问权限。我正在研究的是一个可靠地发布程序更新的方案

我花了相当多的时间寻找Windows服务自动更新的最佳实践,但发现很少有用的信息。大多数技术,如ClickOnce,似乎主要针对基于Windows窗体的应用程序

我目前的计划是:

  • 当更新可用时,让正在运行的服务下载、安装并启动更新服务
  • 更新服务将下载主服务的新版本,并与当前仍处于活动状态的版本并行安装
  • 更新服务接着停止旧版本,然后启动新版本的服务
  • 新版本在启动期间禁用更新服务
我关注的一些重要问题是:

  • 能够处理对主服务和更新服务的更新
  • 能够在更新过程中的任何时候处理中断,如电源故障或连接故障
我想知道的是,这是否是解决这个问题的一种常见方法,或者我是否遗漏了任何重要的东西。是太复杂了,还是太简单了?你是如何做到的(或者,更好的是,你是如何成功做到的)


谢谢

去年我也遇到了同样的问题,我也遇到了很多同样的问题。几点建议:

  • 由于任何一项服务都可能更新, 这两项服务都将发挥作用 另一个的更新程序。遗嘱送达 更新服务B,反之亦然。对于 出于这个原因,我建议你干脆跑步 这两项服务在任何时候都是有效的。除非 你担心的是真的要装货 关闭你的服务器 如果存在更新调用,则 启用/禁用服务管理 不值得花这么多钱

  • Like服务不能安装在服务器上 单机。换句话说,你 无法安装的新版本和旧版本 如果有,服务将并排提供 同名。除非你愿意 让你的更新过程复杂化,我 建议您卸载旧版本 然后安装新版本。 例如,服务A将下载 服务B安装程序,卸载 服务B,安装新版本的 服务B,然后运行。服务B 服务A也会这样做

  • 因为每个服务都在管理 另外,他们不应该只检查 可用的更新,但它们应该 核实彼此的健康状况。对于 例如,服务A将检查以查看 服务B是否存在以及是否存在 跑步如果健康检查失败, 解决此问题的步骤列表 而让服务运行起来将是 由服务A完成。执行 健康检查和恢复操作 将涵盖你现在的任何问题 随着更新而出现,初始 安装或一般操作

  • 在两个客户端上都进行充分的日志记录 和服务器。你会想要追踪的 采取了什么行动以及何时采取。 例如,服务可能会在 正在检查更新,当它是 执行健康检查和 相关行动。关于服务 (假设您正在网络中呼叫 服务查找更新)跟踪 每个服务的呼叫。如果 您的服务没有得到更新 至少你会有一些线索 面包屑(或缺少面包屑) 向你指出问题所在

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


祝你好运。这是一个需要解决的有趣的问题,但也不能没有挫折感——特别是正如您所说,没有太多文档化的信息可用。

感谢您的宝贵意见。您如何处理在卸载旧版本后但在安装新版本之前更新过程中断的潜在情况?你有没有记录你在这个过程中走了多远?我不做增量安装。该服务要么已安装并正在运行,要么未安装。因此,我不知道我在这个过程中走了多远。我只是使用运行状况检查来确定是否有问题,并在必要时重新尝试安装。@Ben您是否在某个地方发布了您的经验?谢谢您的回复。为什么我们不能停止服务呢。覆盖其安装位置的文件并启动服务。我们将覆盖除配置之外的所有文件。我们不需要卸载和安装它再次我猜???