2014-01-27 105 views
2

我有一個64位進程,我有一個32位DLL。我在一個進程外的COM服務器上託管了DLL; COM服務器是可執行的應用程序(即代理過程)。問題是,無論何時我的64位進程突然退出,服務器都無法確定不再有對該對象的引用並退出?進程外COM服務器

任何幫助!

+1

阻止您的64位進程突然退出。 (或者你真的認爲它存在的時候*是突然的嗎?) – abelenky

+0

是的,我的意思是當它突然存在時。 – hiddenUser

+0

[** Exists **](http://www.thefreedictionary.com/exists)或[** Exits **](http://www.thefreedictionary.com/Exits)?? – abelenky

回答

0

讓您的64位進程創建一個名爲mutex。讓你的32位COM服務器監視該互斥鎖,並且當無效/關閉(即 - 由於崩潰)時,就關閉/停止/終止。

如果您需要一個支持多個不同進程的解決方案,那麼需要每個進程調用某種類型的初始化函數(對於COM服務器),它傳入某個共享句柄(互斥鎖或其他),並且COM服務器可以添加它到一個列表。當所有手柄都無效或關閉時,關機。你也可以使用一個文件--64位進程使用LockFile(或獨佔的打開文件/ etc)鎖定一個文件中的一個字節,COM服務器每隔幾秒就嘗試鎖定文件,如果可以的話,關閉。

問題是,使用任何在進程崩潰時會關閉/無效的句柄或方法,這樣其他進程就可以檢測到它。如果你不需要額外的處理,只需使用處理本身的句柄。該命名的互斥體可能最容易實現,但不需要額外的函數或傳遞句柄。

相關問題