Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# 在COM互操作中处理访问冲突_C#_.net_Com Interop - Fatal编程技术网

C# 在COM互操作中处理访问冲突

C# 在COM互操作中处理访问冲突,c#,.net,com-interop,C#,.net,Com Interop,我的托管应用程序正在使用COM互操作。不幸的是,COM组件中存在导致访问冲突的错误。当bug被命中时,整个应用程序崩溃,连接到AppDomain.CurrentDomain.UnhandledException的处理程序没有机会运行。我想知道是否有办法处理AV、向用户显示友好消息并恢复托管应用程序?根本没有办法“处理”访问冲突。您无法知道COM组件在发送AV之前损坏了哪些内存 对于这样的组件,您唯一能做的就是尝试在单独的AppDomain中运行它。这样,如果它崩溃,它只会崩溃一个AppDomai

我的托管应用程序正在使用COM互操作。不幸的是,COM组件中存在导致访问冲突的错误。当bug被命中时,整个应用程序崩溃,连接到
AppDomain.CurrentDomain.UnhandledException
的处理程序没有机会运行。我想知道是否有办法处理AV、向用户显示友好消息并恢复托管应用程序?

根本没有办法“处理”访问冲突。您无法知道COM组件在发送AV之前损坏了哪些内存


对于这样的组件,您唯一能做的就是尝试在单独的AppDomain中运行它。这样,如果它崩溃,它只会崩溃一个AppDomain。

根本没有办法“处理”访问冲突。您无法知道COM组件在发送AV之前损坏了哪些内存

对于这样的组件,您唯一能做的就是尝试在单独的AppDomain中运行它。这样,如果它崩溃,它只会崩溃一个AppDomain。

没有办法“处理”访问冲突

根据您正在使用的组件及其实现方式,即使将其隔离在第二个AppDomain中,也可能会使您的进程崩溃-AppDomains“只是”一个.NET组件,从操作系统的本机角度来看,它们不是孤立的

如果您有一些有问题的组件,您可以通过使用以下方法使其使用更加可靠:

创建一个进程(EXE),该进程包装该组件的使用并公开API(例如通过任何IPC机制)。然后,您可以将该EXE作为一个单独的进程(从主EXE)启动并使用它。。。如果您需要在特定时间和/或满足某些条件后终止该组件,则始终可以从主EXE中终止该“包装器EXE”。。。根据具体组件的不同,在“wrapper EXE”中实现一些特殊的“清理代码”(可能在单独的线程中)可能会很有用,当您需要终止“wrapper EXE”时,会执行这些代码

由于您是在.NET中实现这一点的,您甚至可以在主可执行文件中将“wrapper EXE”作为“嵌入式资源”并从RAM启动它,而无需将其写入文件系统。

无法“处理”访问冲突

根据您正在使用的组件及其实现方式,即使将其隔离在第二个AppDomain中,也可能会使您的进程崩溃-AppDomains“只是”一个.NET组件,从操作系统的本机角度来看,它们不是孤立的

如果您有一些有问题的组件,您可以通过使用以下方法使其使用更加可靠:

创建一个进程(EXE),该进程包装该组件的使用并公开API(例如通过任何IPC机制)。然后,您可以将该EXE作为一个单独的进程(从主EXE)启动并使用它。。。如果您需要在特定时间和/或满足某些条件后终止该组件,则始终可以从主EXE中终止该“包装器EXE”。。。根据具体组件的不同,在“wrapper EXE”中实现一些特殊的“清理代码”(可能在单独的线程中)可能会很有用,当您需要终止“wrapper EXE”时,会执行这些代码

由于您是在.NET中实现这一点的,所以您甚至可以在主可执行文件中将“wrapper EXE”作为“嵌入式资源”并从RAM启动它,而无需将其写入文件系统