gpt4 book ai didi

.net - 如何正确处理频繁更改的 .Net Windows 服务

转载 作者:行者123 更新时间:2023-12-02 05:38:15 25 4
gpt4 key购买 nike

我有一个 Windows 服务,将每两周更新一次

我已经在 DLL 中获得了所有有用的代码,该服务只是几个简单的 StartStop 方法,它们映射到 DLL 中的相同方法.

我使用控制台应用程序来开发/调试 DLL,所以我想知道;与其让服务直接引用 DLL 并在我每次更新时都需要卸载/重新安装,不如使用该服务来包装控制台应用程序有什么缺点吗?

也就是说,而不是...

Private MyService as IMyService
Sub Start()
MyService = New MyService()
MyService.StartAsync()
End Start

做类似...

Const ServiceExecutablePath As String = "C:\Blah\MyService.exe"
Private MyService as Process
Sub Start()
MyService = Process.Start(ServiceExecutablePath)
End Start

那样的话,如果我想发布,我需要做的就是停止服务,替换可执行文件(和相关的 DLL),然后重新启动它。

我还没有完全弄清楚如何进行正常关机。控制台应用程序监听 CTRL C 中断并调用 MyService.Shutdown(Graceful:=True)(阻塞调用)。我应该尝试从服务中模拟相同的内容还是有更好的方法?

最佳答案

我不会包装控制台应用程序,而是在服务中启动一个新的 AppDomain,然后将 dll(插件样式)加载到新的 AppDomain 中并在那里调用您的方法。这样一来,您就可以拆除 AppDomain,它会释放 dll 供您替换使用。

加载 dll 插件样式使您不必持有程序集引用。额外的 AppDomain 允许您卸载 dll 程序集而无需拆除服务 AppDomain(通常是一种不愉快的工作体验)。

我会避免包装控制台应用程序,因为服务通常不能很好地与 UI 应用程序配合使用。您的控制台窗口仍会生成一个 UI(控制台窗口)。

关于.net - 如何正确处理频繁更改的 .Net Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11371336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com