2011-04-08 115 views
2

有沒有人有關於如何在Windows應用程序沙箱ActiveX組件的任何想法,這樣,如果它崩潰它不搞垮整個應用程序與它一起?我可以看到Google使用Flash來做這件事。它是如何完成的?沙箱ActiveX組件

我覺得他們舉辦出來proc和那麼只有在應用程序中只顯示用戶界面。這可能嗎?

我很感興趣,在C#窗口應用程序這樣做。

回答

1

我最初的想法是,這是不可能的。該瀏覽器的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

0

谷歌瀏覽器設置,但不管它是什麼插件,如果它崩潰,它不走下來的全過程。事實上,他們根本不使用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