【问题标题】:Multiple processes that run the same COM object (.NET)运行相同 COM 对象 (.NET) 的多个进程
【发布时间】:2018-09-22 06:13:09
【问题描述】:

我正在开发将在客户端 PC 上运行的 .NET 代码。代码必须调用已在客户端 PC 上注册的 COM 对象以用于另一个程序。所以我只需要共享一个注册的组件。

我获得了与客户端具有的 COM 组件相同的分发包,将它安装在我的开发机器上并在我的 Visual Studio 中引用它。该代码在我的 PC 上运行良好,我的程序的多个实例不会创建 COM 对象的多个实例(pslist 显示多个 MyProgram.exe 进程但只有一个 COM 进程)。

当我构建我的程序时,它还包括引用的 COM 组件。在我将它分发到客户端的 PC 并运行后,pslist 显示有两个进程正在运行 COM 组件。 IE。客户运行他自己的程序,该程序使用他的 COM 对象,而我的程序也创建了自己的 COM 进程。这很糟糕,因为我在客户端的 PC 上仍然需要一个运行 COM 组件的进程。客户的程序和我的程序都是以同一个用户启动的。

我确实怀疑我的构建中包含的 COM 组件在运行时在客户端的 PC 上使用另一个 ObjectID(但实际上来自同一个安装包)注册,并且操作系统不会将其识别为已经运行的相同组件。需要帮助来诊断此问题的根源并加以解决。

谢谢

【问题讨论】:

  • 你的COM对象是怎么写的? C++? C#?本国的?管理?它如何向 COM 运行时声明自己?这可能是您组件中的设计。如您所见,有多种方法可以注册为 COM 进程外服务器:msdn.microsoft.com/en-us/library/windows/desktop/ms679697.aspx 我们需要更多信息。至于部署的问题,我们肯定帮不上忙,你自己看吧(但是调用同一个CLSID不会创建两个不同的COM对象)
  • 感谢您的回复。不幸的是,我有一个给定的 COM,但不知道它是如何编写的。顺便说一句,在开发PC上,程序的多个实例不要创建多个COM进程
  • 但是这个组件会随着时间的推移而改变,还是同一个二进制文件,在开发机器上作为一个实例运行,在客户端机器上作为多个实例运行?
  • 同一个二进制文件。我将它安装到客户端并在我的应用程序中使用
  • 我能否在我的构建中不包含 COM 并强制使用安装在目标 PC 上的那个?

标签: .net visual-studio com multiple-instances


【解决方案1】:

解决了。在用户的 PC 上运行相同的程序不会导致多个 COM 实例。但是用户 PC 上的 'psexec' 和目标用户的 'runas' 做到了。谢谢你,西蒙的帮助!你不可能知道我试图以同样的方式运行程序!是我的错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2012-04-05
    • 2021-09-09
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多