有没有人知道如何在Windows应用程序中对ActiveX组件进行沙盒化,这样如果它崩溃了,它不会随之降低整个应用程序?我可以看到谷歌用Flash做这件事。怎么做?
我认为他们主持了proc,然后只显示应用程序中的UI。这可能吗?
我对在C#Window应用程序中执行此操作感兴趣。
答案 0 :(得分:1)
我最初的想法是,这是不可能的。 Chrome Flash沙盒是Google和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?
免责声明:我自己没有这样做,所以 - 任何人 - 请随时纠正我的假设。
答案 1 :(得分:0)
谷歌浏览器已设置好,无论它是什么插件,如果崩溃都不会影响整个过程。事实上,他们根本不使用Flash的ActiveX版本......他们使用的是NPAPI版本,与Firefox和Safari相同。
Chrome使用的技巧,我认为你也可以使用,但可能很棘手,是他们在一个单独的过程中启动插件。事实上,Firefox 4已经开始做同样的事情了(如果你在任务栏中查看,当flash运行时你会看到Firefox的plugin-container.exe进程; Chrome只会启动更多chrome.exe进程)。由于它是一个单独的过程,它可能会崩溃,并且它不会取出您的应用程序;你只是检测到其他进程现在已经消失并采取相应的行动。
无论如何,我从未在c#中完成多个进程,但我认为这是可能的。这是AFAIK之类的“沙盒”最常用的方法。我可以用C ++(并且有)来做,但C#可能比较棘手。