32

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

[编辑] 这是一个类似问题的链接,其中包含有助于实现此目的的现代项目的链接:Auto-update library for .NET?

4

8 回答 8

19

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

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

如果您对前者感兴趣,MSDN 模式和实践人员编写了一个应用程序更新程序块,您可以根据自己的服务进行调整。

https://web.archive.org/web/20080506103749/http://msdn.microsoft.com/en-us/library/ms978574.aspx

于 2008-09-20T02:18:44.137 回答
4

I've had good experiences with Google Omaha for updating Windows Services. It can generally be used to update any Windows application but there is a tutorial for using it to update a Windows Service.

In comparison to other update frameworks, Omaha is more complex, but also the most powerful. This is because Google (and now also Microsoft) use it to update their browsers on billions of PCs. However, once it's set up and you understand the basics, it is a very nice experience.

于 2021-03-10T13:07:22.390 回答
3

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

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

于 2008-09-20T02:08:05.443 回答
3

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

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

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

于 2008-09-20T02:27:15.850 回答
3

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

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

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

于 2012-10-01T15:13:49.147 回答
1

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

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

于 2008-11-18T18:11:58.930 回答
1

You can use NetSparke, it supports .NET Core 3+ (.NET 5+) and .NET Framework 4.5.2+. It comes with built-in UI or without any UI at all. You can handle all the events by yourself. It works with an appcast.xml (and also have a utility to generate that), is platform independent and just works out of the box.

Just work trough the documentation on their repository and check the example app ;-)

于 2021-11-10T08:02:09.203 回答
-3

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

于 2008-09-20T02:02:33.180 回答