gpt4 book ai didi

c# - AppDomain,运行程序集 .exe 或 .dll?

转载 作者:行者123 更新时间:2023-11-30 17:16:42 25 4
gpt4 key购买 nike

在写这个问题时:AppDomain, handling the exceptions我还想到了一个不同的问题。

如果你像我上面写的那样写一个插件应用程序。您会将插件编写为可执行文件还是库?

对于通过 AppDomain.ExecuteAssembly(String) 方法运行的动态加载的可执行文件,您有多少控制权?而不是使用 AppDomain.CreateInstanceAndUnwrap(String, String) 创建对象的实例。

我目前有一个接口(interface),该接口(interface)具有在 CreateInstanceAndUnwrap 之后调用的 Start/Run + Stop + Init 方法。您对执行的程序集版本有相同类型的控制吗?如果我使用后者,我该如何实现动态停止该插件的功能?

还是我的想法完全错误?

[问题后编辑]

基本上我们得到了“一个”应用程序和多个功能。

  • 刻录(视频)DVD)
  • 正在打印照片
  • 从照片/摄像机下载图像
  • 销售点
  • 存储服务器,作为备份/configsettings/image+video存储库
  • 在多个显示器上显示上述照片/视频
  • 和其他一些,但这些是主要的“功能”

一台计算机可以运行多个任务/插件。例如,我们可以选择让一台计算机处理整个图像下载/显示/打印系统。或者拥有一台带有多个下载/显示系统的集中打印计算机。

一切都通过套接字进行通信

如果一个插件因为任何原因崩溃,它需要重新启动,并且应该向办公室发送一封邮件。如果同一崩溃在短时间内多次发生,那么它应该发送某种紧急电子邮件并关闭该插件并通知运算符(operator)。

其中一些函数使用第三方非托管代码,一些用 C++/Native 编写,一些用 C++/CLI 编写,另一些用 C# 编写,所有这些都将在不同项目的同一解决方案中编写。

编辑2我们还想将此附加功能添加到系统中。一旦有更新版本的插件可用,它就会自动更新插件。父 AppDomain/thread 应该定期检查更新,如果发现更新,它应该卸载该插件,下载新版本并重新启动它。出于这个特定原因,我认为我们需要使用 AppDomain 的

最佳答案

我肯定会使用 CreateInstanceAndUnwrap()。您可以通过这种方式进行更多控制,并且可以合理地与插件进行通信。当您使用 ExecuteAssembly() 时,您几乎可以启动它然后读取返回值(int)。

此外,在使用 CreateInstanceAndUnwrap() 时,如果您有充分的理由,也没有什么可以阻止您使用 exe。

基本上,您有一个可行的解决方案并且不需要更改它(至少不需要在这个方向上)。

关于c# - AppDomain,运行程序集 .exe 或 .dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7071995/

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