沙箱ActiveX组件

问题描述:

有没有人有关于如何在Windows应用程序沙箱ActiveX组件的任何想法,这样,如果它崩溃它不搞垮整个应用程序与它一起?我可以看到Google使用Flash来做这件事。它是如何完成的?沙箱ActiveX组件

我觉得他们举办出来proc和那么只有在应用程序中只显示用户界面。这可能吗?

我很感兴趣,在C#窗口应用程序这样做。

我最初的想法是,这是不可能的。该浏览器的Flash沙箱是谷歌和Adobe之间的合资企业,其中的Adobe不得不做了很多工作to associate the Flash plugin with the sandbox的:

编辑

退房这样的回答:Detecting application hangs with ActiveX controls in .Net

这可能是你是什么寻找。

此外,如果你是依靠从ActiveX的UI,你可能想看看这个:How do I host an application window as a child of a window belonging to another process?

声明:我没有这样做我自己,所以 - 任何人 - 请随时纠正我的假设。

+0

谢谢西门子。我不知道这是一个协作努力。实际上有意义。 – bobbyalex 2011-04-08 11:31:47

+0

但我们当然在谈论浏览器与Flash的链接,以防止恶意代码。您的需求稍有不同。 – 2011-04-08 11:36:20

+0

你想要的是在你的应用程序的一个窗体中必须有一个特定的UI区域被隔离到一个不同的进程中,同时你的应用程序可以被充分控制,这样你就可以检测到托管窗口后面的进程是“挂”。我对吗? – 2011-04-08 11:44:18

谷歌浏览器设置,但不管它是什么插件,如果它崩溃,它不走下来的全过程。事实上,他们根本不使用Flash的ActiveX版本......他们使用NPAPI版本,与Firefox和Safari相同。

是Chrome浏览器使用,我以为你也可以使用,但可能会非常棘手的伎俩,是他们推出的插件在一个单独的进程。实际上,Firefox 4已经开始做同样的事情(如果你看看你的任务栏,你会在Flash运行时看到Firefox的plugin-container.exe进程; Chrome只会启动更多的chrome.exe进程)。由于这是一个独立的过程,因此它可能会崩溃,并且不会取出您的应用程序;你只是发现其他进程现在已经消失并采取相应的行动。

反正我从来没有做过在C#中的多个进程,但我认为这是可能的。这是“沙盒”最常用的方法,就像AFAIK。我可以用C++(而且)来完成,但C#可能会更棘手。

+0

但我不太确定out proc过程中的UI是否可以托管在另一个过程中。而这基本上就是我想要的。 – bobbyalex 2011-06-05 16:00:24

+0

HWND对系统是全球性的;再次,我不确定这是多么容易在.NET中,但如果你可以得到HWND到子进程,它可以在父进程中创建一个子HWND,然后画到那个子HWND就好了。你甚至需要孩子HWND的唯一原因是你无法从父母那里获得WINPROC。 – taxilian 2011-06-06 17:17:56