【问题标题】:How read Memory from another application - Share Data如何从另一个应用程序读取内存 - 共享数据
【发布时间】:2015-11-26 01:13:11
【问题描述】:

我们可以像这样读取/写入 内存中的数据:

static void Main(string[] args)
{
    using (var ms = new MemoryStream())
    {
        var sw = new StreamWriter(ms);
        sw.WriteLine("Hello World");
        sw.Flush();
        ms.Position = 0;
        var sr = new StreamReader(ms);
        var myStr = sr.ReadToEnd();
        Console.WriteLine(myStr);
    }

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

现在我想在 Ram(内存 = 随机存取内存)上写入数据并从 另一个应用程序n中读取这些数据?
我怎样才能做到这一点并在内存中共享一个字符串?

重要提示:我不想在硬盘上写入任何数据。
编辑:我的 .net 版本是 3.5

【问题讨论】:

  • 嗯,不,进程边界是一堵很高的墙。查看 System.IO.MemoryMappedFiles 命名空间以找到某处。
  • msdn.microsoft.com/en-us/library/… 我使用的是 .net 3.5
  • 好吧,停止使用它。任何人都不必拘泥于 8 年前的免费软件版本。
  • 由于某些原因,我无法在我的服务器上安装 .net 4。有什么问题?
  • @MoonLight 通常“读取其他应用程序的内存”与“共享”相比意味着完全不同的东西(首先通常表示ReadPRocessMemory,后来暗示积极合作 - 进程间通信)。您可以通过搜索 bing.com/search?q=c%23%20read%20memory%20different%20processbing.com/search?q=c%23%20ipc 并添加信息为什么顶级结果不适用于您的案例来改进您的问题。

标签: c# memory visual-studio-2013 .net-3.5 windows-applications


【解决方案1】:

.net 3.5 更新
内存映射文件在windows中已经有一段时间了,所以即使.net 3.5没有它们,仍然可以包装原生api。 Github 项目filemap 就是这样做的。不幸的是,他们没有示例如何在两个进程之间共享内存映射文件。


此答案对 .NET Framework 4.6 和 4.5
很有用 不是 3.5
我认为您不能在两个进程之间共享内存流。最接近的是memory mapped files。检查此answer 以获取其他选项。

【讨论】:

  • 请注意我的.net版本。
  • 在输入时注意您的帖子。您在我的回答后发布了版本要求作为编辑,并且在您的 .net 版本中也可以使用 pinvoke。
  • 不,它在我的标签上。没有必要对此进行讨论。请编辑您对我的问题的回答和帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 2011-04-14
相关资源
最近更新 更多