在撰写这个问题的时候:AppDomain, handling the exceptions,我也想到了一个不同的问题。
如果你要编写像我上面写的插件应用程序,你会将插件编写为可执行文件还是库?
如果使用
我现在有一个接口,其中包含一个在
还是我的思路完全错误?
[编辑 - 问题后]
基本上,我们有“一个”应用程序和多个功能。
烧录(视频)DVD
打印照片
从照相/摄像机下载图像
销售点
存储服务器,作为备份/配置设置/图像+视频存储库
在多个显示器上显示上述照片/视频
还有其他一些,但这些是主要的“功能”。
计算机可以运行多个任务/插件。例如,我们可以选择让一台计算机处理整个图像下载/显示/打印系统。或者有一台集中的打印计算机,带有多个下载/显示系统。
所有内容都通过套接字进行通信。
如果插件因任何原因崩溃,它需要重新启动,并向办公室发送邮件。如果在短时间内发生同样的崩溃,则应发送某种紧急电子邮件并关闭该插件并通知操作员。
其中一些功能使用第三方未管理的代码,有些是用C++ / Native编写的,有些是用C++ / CLI编写的,还有一些是用C#编写的,所有这些都将被编写为不同的项目在同一个解决方案中。
编辑2
我们还想向系统添加此附加功能。即在插件有新版本可用时自动更新插件。父AppDomain /线程应定期检查更新,如果发现更新,则应卸载该插件,下载新版本并重新启动。出于这个特定的原因,我认为我们需要使用AppDomain。
如果你要编写像我上面写的插件应用程序,你会将插件编写为可执行文件还是库?
如果使用
AppDomain.ExecuteAssembly(String)
方法运行动态加载的可执行文件而不是使用AppDomain.CreateInstanceAndUnwrap(String, String)
创建对象实例,你会有多少控制权?我现在有一个接口,其中包含一个在
CreateInstanceAndUnwrap
之后调用的Start/Run + Stop + Init方法。你对执行的程序集版本是否具有相同类型的控制?如果我使用后者,如何实现停止该插件的功能?还是我的思路完全错误?
[编辑 - 问题后]
基本上,我们有“一个”应用程序和多个功能。
烧录(视频)DVD
打印照片
从照相/摄像机下载图像
销售点
存储服务器,作为备份/配置设置/图像+视频存储库
在多个显示器上显示上述照片/视频
还有其他一些,但这些是主要的“功能”。
计算机可以运行多个任务/插件。例如,我们可以选择让一台计算机处理整个图像下载/显示/打印系统。或者有一台集中的打印计算机,带有多个下载/显示系统。
所有内容都通过套接字进行通信。
如果插件因任何原因崩溃,它需要重新启动,并向办公室发送邮件。如果在短时间内发生同样的崩溃,则应发送某种紧急电子邮件并关闭该插件并通知操作员。
其中一些功能使用第三方未管理的代码,有些是用C++ / Native编写的,有些是用C++ / CLI编写的,还有一些是用C#编写的,所有这些都将被编写为不同的项目在同一个解决方案中。
编辑2
我们还想向系统添加此附加功能。即在插件有新版本可用时自动更新插件。父AppDomain /线程应定期检查更新,如果发现更新,则应卸载该插件,下载新版本并重新启动。出于这个特定的原因,我认为我们需要使用AppDomain。