我花了很多时间寻找Windows服务自动更新的最佳做法,但发现很少有用的信息.大多数技术,如ClickOnce,似乎主要面向基于Windows Forms的应用程序.
我目前的计划是:
>当更新可用时,请运行服务下载,安装并启动更新服务.
>更新服务将下载新版本的主要服务,并且将其并排安装当前的活动版本.
>更新服务接下来会停止旧版本,然后启动新版本的服务.
>新版本在启动时禁用更新服务.
对我来说,一些重要的问题是:
能够处理主服务和更新服务的更新
>能够在更新过程中的任何时候处理电源故障或连接故障等中断
令人疑惑的是,如果这是解决这个问题的一个常见方法,或者如果我没有任何关键的东西.太复杂了,还是太简单了?你会怎么做(或者更好的是,你如何成功地完成这个工作)?
谢谢!
>由于任一服务都可能更新,
两个服务都将作为
另一个的更新.服务A意志
更新服务B,反之亦然.对于
这个原因,我建议只要运行
在任何时候都有两个服务.除非
你担心真的加载
下来你的服务器
做更新存在的电话,
启用/禁用服务管理
不值得开销.
像服务一样不能安装
单机.换句话说,你
无法安装新旧版本
服务并排,如果他们有
同名.除非你要
复杂的更新过程,我
建议您卸载旧版本
然后安装新版本.
例如,服务A将下载
服务B安装程序,卸载
服务B,安装新版本
服务B然后运行.服务B
将对服务A做同样的事情.
>由于每个服务都在管理
另外,他们不仅要检查
可用的更新,但他们应该
验证彼此的健康.对于
例如,服务A将检查
如果服务B存在,如果是
运行.如果健康检查失败,
解决问题的步骤列表
并得到运行的服务
由服务A完成.执行
健康检查和恢复操作
将会覆盖你现在什么问题
出现在更新,初始
安装或一般操作.
>在客户端上进行大量日志记录
和服务器.你会跟踪
采取了什么行动和什么时候.
例如,服务A可能会
正在检查更新,何时
执行健康检查和
相关联的行动.在服务
(假设你正在打电话入网
服务寻找更新)轨道
每个服务的呼叫.如果
您的服务没有更新
至少你会有一个痕迹
面包屑(或缺少面包屑)
指出你的问题.
有一系列潜在的问题,这些解决方案是这样的:服务在启动时不运行,UAC阻碍,无法使用同一用户安装和卸载服务,确保用户安装服务具有足够的权限,连接丢失,在客户端机器上安装.NET Framework,必要时安装后重新启动等.
最好的运气.这是一个有趣的问题要解决,但如果没有挫败感,就不会有任何失败 – 特别是因为如你所说,没有很多文件资料可用.