如何在另一个进程中访问 .Net 对象?

Posted

技术标签:

【中文标题】如何在另一个进程中访问 .Net 对象?【英文标题】:How do I access .Net objects in another process? 【发布时间】:2011-09-09 21:58:39 【问题描述】:

我正在运行一个 .Net 应用程序。

我希望另一个 .Net 应用程序连接第一个应用程序并在其中一个对象上调用公共方法。

我知道我可以通过 WCF 做到这一点,但我的理解是 .Net 对象都是 COM 意义上的组件,因此我假设可以在同一台机器上跨进程边界编组。

这可能吗?如果是这样,我如何从第二个应用程序中获取第一个应用程序中的对象?

非常感谢您的帮助。

【问题讨论】:

我应该澄清一下,我知道它们不是 COM 可见对象。我的意思是它们是不同的组件,就像 COM 对象是一个组件一样。 techmikael.blogspot.com/2010/02/… 可能是相关的 【参考方案1】:

从MarshalByRefObject 继承的任何对象都可以跨进程边界访问(但这与 COM 可见不同)。这就是 wcf 将在引擎盖下使用的内容。

但是,如果您使用 wcf 而不是(较低级别的)远程处理,那么您允许跨越机器边界的长期选项(远程处理也允许您这样做,但它比 wcf 更加复杂...... edit - 安全性也较低,如下面的 cmets 中 daniel 提供的链接所述)。

简而言之,我同意 Daniel 的观点 - 您最好还是坚持使用 WCF - 以备将来选择和易于使用。

【讨论】:

请详细说明可以跨进程边界访问对象的部分。你会用什么来实现这个目标? .Net 远程处理是 Nathan 所说的。 啊。这实际上已被 WCF 取代,不应再使用:msdn.microsoft.com/en-us/library/kwdt6w2k%28v=VS.100%29.aspx【参考方案2】:

你的理解不正确。默认情况下,.NET 类不是 COM 对象。但是,您可以使它们在每个类的基础上或整个程序集中都可见。 话虽如此,这对您没有帮助,因为 COM 对象正在与使用它们的进程一起在进程内运行,即它在您的第二个应用程序中运行。您无法像这样连接到其他应用程序。 您确实应该使用 WCF 来完成这项任务。

【讨论】:

以上是关于如何在另一个进程中访问 .Net 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个 .NET 进程获取对象的句柄?

如何在另一个java项目中使用带有共享对象的jar文件

如何检测在另一个进程中弹出的消息框?

Perl - 如何使用在另一个 Perl 脚本的模块中创建的进程句柄

如何从 C++ 代码引发事件并在另一个进程的 C# 代码中调用处理程序?

在另一个进程中访问共享内存缓冲区