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

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

[edit]以下是一个类似问题的链接,其中包含指向现代项目的链接,可帮助实现此目的: 自动更新.NET库?

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

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

如果您对前者感兴趣,那么MSDN模式和实践民众会编写一个应用程序更新程序块,以适应您的服务。

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

我不知道有任何框架可以帮助解决这个特定问题。

您可以尝试将服务的业务逻辑与实际服务代码分离到不同的程序集中。 让服务程序集定期检查业务逻辑程序集的更新,必要时从远程源复制它,卸载旧的BL程序集(也许删除),然后动态加载新版本(卸载旧程序集不是一项微不足道的任务)。

另一种可能的解决方案是运行单独的服务,如果有更新则停止另一个服务,然后更新服务。 您无法自行更新服务,因为正在运行的.dll不会停止。

分离业务逻辑层将是一个不错的选择。 您还可以重写主服务以在主服务器或控制服务的reflection下运行。 这类似于分离业务逻辑,它只需要停止一个线程并再次启动它。

我知道没有已知的框架可以做到这一点。 我自己做了这个,但这不是一个公共框架。

我一直在使用WyBuild来更新我的应用程序(包括Windows服务),这非常棒。 真的很容易使用,并且很容易与现有应用程序集成。 这是一个非常棒的自动更新框架……

http://wyday.com/wybuild/help/automatic-updates/windows-services-console-apps.php http://wyday.com/wybuild/help/silent-update-windows-service.php

请注意,它是一个付费框架(许可证是每个开发人员,包括免费试用版)

万一其他人正在搜索这个; 我觉得这个链接很有趣。 我没有实现这个解决方案,但看起来它可能对我有用

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

你能澄清一下你的问题吗? 我有点困惑,因为据我所知,你总是可以覆盖服务使用的DLL。 可以轻松地将服务的复制和重新启动作为构建过程的一部分。