我希望我的C#Windows服务能够自动更新

时间:2020-03-06 14:28:28  来源:igfitidea点击:

是否有可用于使CWindows服务自动检查较新版本并自行升级的框架?我当然可以编写代码来实现此目的,但是我正在寻找一个已经实现并且(最重要的是)经过测试的框架。

[编辑]
这是一个类似问题的链接,其中有一个指向有助于完成此任务的现代项目的链接:自动更新.NET库?

解决方案

我们能澄清一下问题吗?我有点困惑,因为据我所知,
我们始终可以覆盖服务使用的DLL。服务的复制和重新启动可以很容易地成为构建过程的一部分。

我不知道任何有助于解决此特定问题的框架。

我们可以尝试将服务的业务逻辑与实际服务代码分离为不同的程序集。让服务程序集定期检查业务逻辑程序集的更新,如有必要,从远程源复制它,卸载旧的BL程序集(甚至删除),然后动态加载新版本(不卸载旧的程序集)琐碎的任务)。

卸载类型的唯一方法是销毁appdomain。为此,需要将托管层与执行服务代码分开,这非常复杂。 (有点像钥匙孔手术)

a)运行批处理任务或者b)在服务中检测更新,然后启动一个单独的过程来停止服务,更新程序集等,然后重新启动它,可能会更容易。

如果我们对前者感兴趣,那么MSDN模式和实践人员会编写一个适用于服务的应用程序更新程序块。

http://msdn.microsoft.com/en-us/library/ms978574.aspx

另一个可能的解决方案是让一个单独的服务运行,如果有更新,则停止另一个服务,然后更新该服务。我们本身无法进行服务更新,因为正在运行的.dll不会停止。

分离业务逻辑层将是一个不错的选择。我们还可以重写主服务以在主服务或者控制服务的反射下运行。这类似于分离业务逻辑,只需要停止线程然后重新启动即可。

我不知道执行此操作的已知框架。我自己做过,但这不是一个公共框架。

如果其他人正在搜索;我发现此链接很有趣。我尚未实现此解决方案,但看起来它可能对我有用

http://www.eggheadcafe.com/articles/20041204.asp