【问题标题】:Out-of-process COM server进程外 COM 服务器
【发布时间】:2014-02-18 23:24:02
【问题描述】:

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

任何帮助!

【问题讨论】:

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

标签: c# com


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 2012-09-06
    • 2015-05-23
    • 2011-05-17
    • 2012-10-10
    • 2010-11-18
    • 1970-01-01
    • 2010-10-04
    • 2011-07-29
    相关资源
    最近更新 更多