代码之家  ›  专栏  ›  技术社区  ›  Larry Smithmier

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

  •  28
  • Larry Smithmier  · 技术社区  · 17 年前

    下面是一个类似问题的链接,其中包含帮助完成此任务的现代项目的链接: Auto-update library for .NET?

    6 回复  |  直到 9 年前
        1
  •  19
  •   Jesse Hufstetler    7 年前

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

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

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

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

        2
  •  4
  •   Michael Herrmann    5 年前

    Google Omaha 用于更新Windows服务。它通常可用于更新任何Windows应用程序,但存在 tutorial 用于使用它更新Windows服务。

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

        3
  •  3
  •   ilitirit    17 年前

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

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

        4
  •  3
  •   David Basarab    17 年前

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

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

        5
  •  3
  •   Omaer    13 年前

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

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

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

        7
  •  0
  •   jebbie    4 年前

    你可以用 NetSparke

    只需查看他们存储库中的文档,然后查看示例应用程序;-)

        8
  •  -3
  •   Esteban Araya    17 年前

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

    推荐文章