在两个 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 位进程之间的共享内存
使用 c# 在 32 位和 64 位窗口中打开 ms-access .mdb