Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建一个WPF“;“控制”;在外部进程中运行的_C#_Wpf_Appdomain_External Process - Fatal编程技术网

C# 创建一个WPF“;“控制”;在外部进程中运行的

C# 创建一个WPF“;“控制”;在外部进程中运行的,c#,wpf,appdomain,external-process,C#,Wpf,Appdomain,External Process,我有一个WPF应用程序,其中包含许多子控件 其中一个控件托管一个第三方库,该库在封面下运行一些本机代码,从而引发访问冲突并使应用程序崩溃。不幸的是,删除库不是一个选项 我想做的是启动一个新的windows进程,在其中托管第三方库,并以某种方式与之通信。谷歌Chrome和IE8处理浏览器插件的方式大致相同 问题是,第三方库需要绘制到屏幕上,因此我必须在WPF应用程序的主窗口中使用与HTML iframe相当的内容 我不知道如何开始,到目前为止,谷歌很难做到这一点。非常感谢您的建议。可能不是最简单的

我有一个WPF应用程序,其中包含许多子控件

其中一个控件托管一个第三方库,该库在封面下运行一些本机代码,从而引发访问冲突并使应用程序崩溃。不幸的是,删除库不是一个选项

我想做的是启动一个新的windows进程,在其中托管第三方库,并以某种方式与之通信。谷歌Chrome和IE8处理浏览器插件的方式大致相同

问题是,第三方库需要绘制到屏幕上,因此我必须在WPF应用程序的主窗口中使用与HTML iframe相当的内容


我不知道如何开始,到目前为止,谷歌很难做到这一点。非常感谢您的建议。

可能不是最简单的任务。您是否考虑过将您的第三方内容托管在单独的应用程序域中?这样,您也将获得良好的隔离级别,同时为您节省另一个项目的麻烦。它是否必须不断刷新,或者是否可以在应用程序中的预定义点刷新?也许你可以采用某种方案,基本上对第三方输出进行屏幕截图,并在原始应用程序中显示为图像…

可能不是最简单的任务。您是否考虑过将您的第三方内容托管在单独的应用程序域中?这样,您也将获得良好的隔离级别,同时为您节省另一个项目的麻烦。它是否必须不断刷新,或者是否可以在应用程序中的预定义点刷新?也许你可以采用一些方案,基本上对第三方输出进行屏幕截图,并将其显示为原始应用程序中的图像…

这是一个困难的方案,但幸运的是,最近在这方面做了一些工作

您听说过.NET3.5中的System.Addin命名空间吗?在这种情况下可能会有所帮助。它允许在单独的AppDomain中加载控件,但可以在同一UI中显示。我想你必须做一点工作才能让一切正常沟通(以前从未这样做过),但这是可能的

请看一下外接程序团队的这篇早期文章:

似乎他们将样本和助手代码保存在codeplex上:


我对这个很感兴趣,所以如果你成功了,让我们知道你的情况

这是一项艰巨的任务,但幸运的是,您最近在这方面做了一些工作

您听说过.NET3.5中的System.Addin命名空间吗?在这种情况下可能会有所帮助。它允许在单独的AppDomain中加载控件,但可以在同一UI中显示。我想你必须做一点工作才能让一切正常沟通(以前从未这样做过),但这是可能的

请看一下外接程序团队的这篇早期文章:

似乎他们将样本和助手代码保存在codeplex上:


我对这个很感兴趣,所以如果你成功了,让我们知道你的情况

来晚了。如果您仍然需要此功能,您是否看过此项目:


我在我的LOB应用程序的多个外部进程中运行多个插件。我的框架源于上面的项目。

来得很晚。如果您仍然需要此功能,您是否看过此项目:


我在我的LOB应用程序的多个外部进程中运行多个插件。我的框架源自上述项目。

据我所知,一个单独的AppDomain仍然存在于同一个win32进程中?我需要在单独的windows进程中运行它,因为第三方应用程序在本机代码级别崩溃(win32访问冲突等)。当这些情况发生时,整个windows进程都会停止,.NET和allAn AppDomain应该为您解决问题-如果一个AppDomain停止运行,其他AppDomain也可以。将AppDomain视为“.NET进程”(某种程度上)。您必须使控件跨越边界才能工作,并且控件不扩展MarshallByRefObject。这是行不通的。如果行不通,BCL中的System.Addin是如何做到的?他们有WPF usercontrols在ProcessOut中运行的演示,只是为了澄清——AppDomains只提供内存隔离,在执行级别上不保护应用程序。这意味着,如果流程中的任何AppDomain遇到未处理的异常,它将关闭整个流程。保护宿主应用程序的唯一方法是确保不安全代码在单独的进程中隔离。据我所知,单独的AppDomain仍然存在于同一win32进程中?我需要在单独的windows进程中运行它,因为第三方应用程序在本机代码级别崩溃(win32访问冲突等)。当这些情况发生时,整个windows进程都会停止,.NET和allAn AppDomain应该为您解决问题-如果一个AppDomain停止运行,其他AppDomain也可以。将AppDomain视为“.NET进程”(某种程度上)。您必须使控件跨越边界才能工作,并且控件不扩展MarshallByRefObject。这是行不通的。如果行不通,BCL中的System.Addin是如何做到的?他们有WPF usercontrols在ProcessOut中运行的演示,只是为了澄清——AppDomains只提供内存隔离,在执行级别上不保护应用程序。这意味着,如果流程中的任何AppDomain遇到未处理的异常,它将关闭整个流程。保护宿主应用程序的唯一方法是确保在单独的进程中隔离不安全的代码。谢谢。我已经调查过这个系统了。Addins之前,它看起来应该能工作。我将下载clr加载项示例并进行查看。希望我能够弄清楚他们正在使用的底层技术,并自己使用它——系统所需的合同材料。Addins比我需要或需要的要重得多