C# 进程外COM服务器

C# 进程外COM服务器,c#,com,C#,Com,我有一个64位进程和一个32位DLL。我将DLL托管在进程外COM服务器中;COM服务器是一个可执行的应用程序(即代理进程)。问题是,每当我的64位进程突然退出时,服务器无法确定不再有对该对象的引用并退出 任何帮助 让您的64位进程创建一个命名的。让您的32位COM服务器监视该互斥体,当无效/关闭(即-由于崩溃)时,只需关闭/停止/终止 如果您需要一个支持多个不同进程的解决方案,那么需要每个进程调用某种类型的初始化函数(到您的COM服务器),该函数传入一些共享句柄(互斥或其他),并且您的COM服

我有一个64位进程和一个32位DLL。我将DLL托管在进程外COM服务器中;COM服务器是一个可执行的应用程序(即代理进程)。问题是,每当我的64位进程突然退出时,服务器无法确定不再有对该对象的引用并退出


任何帮助

让您的64位进程创建一个命名的。让您的32位COM服务器监视该互斥体,当无效/关闭(即-由于崩溃)时,只需关闭/停止/终止

如果您需要一个支持多个不同进程的解决方案,那么需要每个进程调用某种类型的初始化函数(到您的COM服务器),该函数传入一些共享句柄(互斥或其他),并且您的COM服务器可以将其添加到列表中。当所有句柄无效或关闭时,关闭

您也可以使用文件——64位进程使用LockFile(或独占打开文件/etc)锁定文件中的一个字节,COM服务器每隔几秒钟就会尝试锁定该文件,如果可以,请关闭


关键是,使用任何句柄或方法,当一个进程崩溃时关闭/失效,这样其他进程就可以检测到它。如果不需要额外的句柄,只需使用进程本身的句柄即可。不过,命名互斥体可能是最容易实现的,不需要额外的函数或句柄传递。

请停止64位进程突然退出。(或者你真的是指它突然存在的时候吗?)是的,我是指它突然存在的时候,或者??退出;也就是说,当它由于某种“崩溃”原因突然关闭时。@HansPassant:只有在服务器中没有运行COM方法时才会发生这种情况。如果客户端调用某个在服务器中运行一年的方法,然后客户端崩溃,那么服务器将运行该方法一年。