我想让我的C#Windows服务自动更新自己

我想让我的C#Windows服务自动更新自己,c#,windows-services,upgrade,C#,Windows Services,Upgrade,是否有一个框架可用于使C#Windows服务自动检查更新版本并自行升级?我当然可以编写代码来实现这一点,但我正在寻找一个已经实现和(最重要的)测试过的框架 [编辑] 这里有一个类似问题的链接,链接到有助于实现这一点的现代项目:你能稍微澄清一下你的问题吗?我有点困惑,因为据我所知, 您始终可以覆盖服务使用的DLL。复制和重新启动服务可以很容易地成为构建过程的一部分。我不知道有任何框架可以帮助解决这个特定问题 您可以尝试将服务的业务逻辑从实际的服务代码分离到不同的程序集中。让服务程序集定期检查对业务

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

[编辑]
这里有一个类似问题的链接,链接到有助于实现这一点的现代项目:

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

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


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

卸载类型的唯一方法是销毁appdomain。要做到这一点,需要将宿主层与正在执行的服务代码分离——这相当复杂。(有点像做锁孔手术)

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

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


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

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


据我所知,没有已知的框架能够做到这一点。我自己做过,但这不是一个公共框架。

以防其他人正在搜索此框架;我发现这个链接很有趣。我还没有实现这个解决方案,但看起来它可能适合我


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


请注意,它是一个付费框架(许可证由每个开发者提供,包括免费试用)

我在更新Windows服务方面有很好的经验。它通常可用于更新任何Windows应用程序,但使用它更新Windows服务有一个简单的方法


与其他更新框架相比,Omaha更复杂,但也是最强大的。这是因为谷歌(现在还有微软)使用它来更新数十亿台PC上的浏览器。然而,一旦设置好了,您了解了基本知识,这是一个非常好的体验。

很抱歉给您带来困惑。我希望我的服务能够轮询更新并在找到时自行安装。我在许多生产(访问控制)服务器上提供了许多服务,对手动干预的草率和风险感到非常厌倦。我很惊讶,就像今天一样,3年后没有简单的解决方案。谢谢stepbu。卸载一个类型是非常困难的。它将涉及在内存中展开该类型的所有实例,以及对该实例的任何引用,例如其他实例中的成员和属性。副作用可能是非常不可预测的中等复杂应用程序。卸载appdomain解决方案通过使该appdomain中的所有内存无效来解决该问题。我知道这是一个老生常谈的问题,但我想补充一点,在目前拥有足够资源以“正确的方式”做事的公司,比如Adobe和Google,也已经决定使用单独的服务来检查更新模式。他们可能没有使用C#,他们的项目可能与您的项目不太相似,但我认为至少承认这是一个真正的解决方案,具有真正的好处,而不仅仅是一个足够好的黑客攻击。我几乎不会将Adobe或Google的更新方法称为正确的堡垒。大多数情况下,它们在家庭环境中的快速切换/多用户登录失败。失败的一些示例:每个用户安装一个服务。循环吸油外壳延伸件。在任务计划程序中为每个用户安装任务。这些都不是好的行为。一个更好的例子是IMHO的定点后台检查和UI可选的“重新启动到更新”方法。服务故事是在重新启动时安装-强制(由应用程序)或在下次重新启动时安装。选择你的毒药。我刚刚发现一篇博客文章“在.NET/C#中创建自动更新应用程序”(Creating a Auto-update Application in.NET/C#),其中有一个代码链接。这是一个应用程序,而不是一个服务,但我打赌它可以很容易地更新工作。你有没有可能与该产品有关联?没有,我只是一个普通用户。。。(很抱歉回复太晚!)这正是谷歌奥马哈所做的。它作为一个独立的服务运行,并“从外部”更新其他应用程序。看见