我正在使用 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 關注
- 967 瀏覽
添加回答
舉報
0/150
提交
取消