亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 967 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號