我正在使用 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
将句柄传递给子进程(我不知道具体如何),但也许没有必要。
- 1 回答
- 0 关注
- 854 浏览
添加回答
举报
0/150
提交
取消