我即将开发一个程序,该程序将作为Windows服务在几个客户端的后端服务器(具有Internet访问权限)上安装和运行。我没有物理访问服务器。我正在研究的是一个可靠地推出程序更新的方案。
我花了很多时间寻找Windows服务自动更新的最佳做法,但却找不到有用的信息。大多数技术,例如ClickOnce,似乎主要适用于基于Windows Forms的应用程序。
我目前的计划是:
对我来说,一些重要的问题是:
令人疑惑的是,这是解决这个问题的常用方法和/或我是否遗漏任何关键问题。这太复杂了,还是太简单了?你会怎么做(或者,更好的是,你是如何成功完成的?)
谢谢!
答案 0 :(得分:13)
去年我遇到了同样的问题,我也遇到了很多相同的问题。一些建议:
由于任何一项服务都可能会更新, 两种服务都将起到作用 另一个更新者。服务A意志 更新服务B,反之亦然。对于 这个原因,我建议干脆跑 这两项服务始终如一。除非 你担心真的加载 用你的服务器 更新存在的调用, 启用/禁用服务管理 不值得开销。
喜欢的服务无法安装在 单机。换句话说,你 无法安装新旧版本 服务并排,如果他们有 同名。除非你要 我的更新过程复杂化了 建议您卸载旧版本 然后安装新版本。 例如,服务A将下载 服务B安装程序,卸载 服务B,安装新版本 服务B然后运行。服务B. 对服务A也会这样做。
由于每项服务都在管理 另外,他们不仅要检查 可用的更新,但他们应该 验证对方的健康状况。对于 例如,服务A会检查以查看 如果服务B存在且是否存在 运行。如果健康检查失败, 解决问题的步骤列表 并获得运行的服务 由服务A完成。执行 健康检查和恢复操作 现在将覆盖你的问题 随着更新,初始产生 安装或一般操作。
在客户端上进行充足的日志记录 和服务器。你想跟踪 采取了什么行动以及何时采取 例如,服务A可能就是它 正在检查更新 执行健康检查和 相关行动。在服务上 (假设你正在调用网络 服务寻找更新)跟踪 每个服务的电话。如果 您的服务未获得更新 至少你会有一丝痕迹 面包屑(或没有面包屑) 指出你的问题。
这种解决方案有很多潜在的问题:服务没有在启动时运行,UAC阻碍,无法使用同一用户安装和卸载服务,确保用户安装服务有充足的权限,连接丢失,在客户端计算机上安装.NET Framework,必要时在安装后处理重新启动等等。
祝你好运。这是一个有趣的问题需要解决,但它不会没有它的挫败感 - 特别是因为,正如你所说,没有很多记录的信息可用。