在两个 C# 应用程序(32 位和 64 位)之间进行 IPC 的最佳方式是啥

Posted

技术标签:

【中文标题】在两个 C# 应用程序(32 位和 64 位)之间进行 IPC 的最佳方式是啥【英文标题】:What's the best way to IPC between two C# apps (32bit and 64bit)在两个 C# 应用程序(32 位和 64 位)之间进行 IPC 的最佳方式是什么 【发布时间】:2011-12-18 13:48:25 【问题描述】:

一个是64位,一个是32位。我目前正在制作 32 位应用程序控制台并读取输出。有没有更好的办法?我的数据是文本。

编辑:两个可执行文件都在同一台机器上。

【问题讨论】:

你能把 64 位应用程序编译为 x86 并拥有一个进程吗? 换句话说,您问题的 32/64 部分实际上并不重要。真正的问题是您需要在两个不同的进程之间进行通信。 好吧,如果我能以某种方式将它们合并为一个,那当然会更好。 是什么阻止你合并? 如果从 64 位环境运行 32 位,如何合并它们? 【参考方案1】:

如果您受限于 .NET 2.0,那么有几种方法可以做到:

    如果两个应用在不同的机器上,你可以使用sockets,或者.net Remoting(取决于交互的复杂度) 如果两个应用程序在同一台机器上,.net Remoting 是一个不错的选择。

它们是 32 位或 64 位这一事实不会以任何方式影响这一点。

【讨论】:

@blez:那么我建议使用 .Net Remoting。它允许您直接从一个程序调用方法到另一个程序。 这不是使用套接字吗?那么它可以被防火墙或杀毒软件阻止吗? @blez:在同一台机器上,我认为它使用共享内存。您可以指定要使用的底层机制。【参考方案2】:

在 .NET 2.0 中,您可以use Remoting。

【讨论】:

这是使用 Sockets 吗?可以被防火墙屏蔽吗? @blez,是的,它可以被阻止。您可以使用防火墙例外中的端口。 所以,我最好使用命名管道或控制台输出。 @blez,是的,命名管道是另一种选择。 @blez,据我所知,.net 2.0 中的命名管道只能通过调用本机 Win32 管道 API 来使用。就像我说的,如果你在同一台机器上,远程处理也可以使用共享内存。【参考方案3】:

做 IPC 程序是 32 位还是 64 位都没有关系,所以选择你想要的方法(参见this post)。

【讨论】:

以上是关于在两个 C# 应用程序(32 位和 64 位)之间进行 IPC 的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

boost::interprocess 32 位和 64 位进程之间的共享内存

TestComplete 64位和32位之间的区别

使用 c# 在 32 位和 64 位窗口中打开 ms-access .mdb

在 64 位和 32 位 (WOW64) 应用程序之间使用 WM_COPYDATA 是不是安全?

32 位和 64 位之间的指针增量差异

Windows x64 上 32 位和 64 位应用程序之间的进程间通信