为了账号安全,请及时绑定邮箱和手机立即绑定

MemoryMappedFile.openExisting :使用 2 个不同的进程时找不到指

MemoryMappedFile.openExisting :使用 2 个不同的进程时找不到指

C#
Helenr 2021-10-31 18:42:21
我正在使用 2 个不同的过程,比如说 -Process1.exe : 执行一些操作并更新一个字符串变量,该变量将保存在一个MemoryMappedFile (To acheive IPC) 中,它是文件Process2.exe:调用Process1。完成“Process1”后,它会尝试打开 MemoryMappedFile文件并获取字符串以供进一步使用。这是代码片段-进程1.exe//Some codepublic void DoSomeStuff(){onst int MMF_MAX_SIZE = 4096;const int MMF_VIEW_SIZE = 4096;try   {     using (MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("file", MMF_MAX_SIZE, MemoryMappedFileAccess.ReadWrite))     {          using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, MMF_VIEW_SIZE))          {               Message message1;               message1.strName = "Some name";               BinaryFormatter formatter = new BinaryFormatter();               formatter.Serialize(stream, message1);          }     }   }catch(Exception e){     MessageBox.Show(e.Message);}}进程2.exe        const int MMF_VIEW_SIZE = 4096;        using (MemoryMappedFile file = MemoryMappedFile.OpenExisting("file"))        {            using (MemoryMappedViewStream stream = file.CreateViewStream(0, MMF_VIEW_SIZE))            {                BinaryFormatter formatter = new BinaryFormatter();                byte[] buffer = new byte[MMF_VIEW_SIZE];                Message message1;                if (stream.CanRead)                {                    stream.Read(buffer, 0, MMF_VIEW_SIZE);                    using (MemoryStream ms = new MemoryStream(buffer))                    {                        ms.Seek(0, SeekOrigin.Begin);                        message1 = (Message)formatter.Deserialize(ms);                        string name = message1.strName;                    }                }            }        }这是我的 Message 类,它写在两个进程中,class Message{    public string strName;}问题:完成Process1后,它已成功将字符串数据写入MemoryMappedFile但是当我尝试使用 line在Process2 中打开文件时MemoryMappedFile 文件 = MemoryMappedFile.OpenExisting("file")我收到错误 - Specified file not found。我对MemoryMappedFile实现来实现 IPC非常陌生。有人可以建议我在这里做什么吗?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

MemoryMappedFile.CreateOrOpen()您使用将创建一个非持久性内存映射文件。在使用 ( MemoryMappedFile mmf =)结束时(或在 结束时Process1),文件将被“销毁”(它将不复存在)。

解决方案:使用真实文件。

其他解决方案可能是在调用子进程之前打开父进程中的内存映射。甚至有一个CreateOrOpen重载接受 aHandleInheritability将句柄传递给子进程(我不知道具体如何),但也许没有必要。


查看完整回答
反对 回复 2021-10-31
  • 1 回答
  • 0 关注
  • 854 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信