当从c#访问内存映射文件而不是从c ++访问内存映射文件时,为什么会出现访问被拒绝的异常

sco*_*ott 6 c# c++ wcf memory-mapped-files

我有一个使用命名管道的WCF服务.显然不使用url作为名称.它从URL生成GUID,然后将其存储在内存映射文件中.所以我编写了一个C++应用程序,它从内存映射文件中获取管道的名称,这很有用.现在我正在尝试制作ac#app,它从内存映射文件中获取管道的名称.这是我正在使用的代码.

    private static string GetPipeName(string mappedFileName)
    {
        var mappedFile = MemoryMappedFile.OpenExisting(mappedFileName, MemoryMappedFileRights.Read);
        var bytes = new List<byte>();
        using (MemoryMappedViewStream s = mappedFile.CreateViewStream())
        {
            using (var b = new BinaryReader(s))
            {
                bytes = b.ReadBytes((int)b.BaseStream.Length).ToList();
            }

        }
        var sb = new StringBuilder();
        foreach (var b in bytes)
        {
            sb.Append(b.ToString("x2"));
            sb.Append(" ");
        }
        Console.WriteLine(sb.ToString());
        return sb.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

在第一个using语句中,我得到一个UnauthorizedAccessException,表示"拒绝访问路径".

我能够逐步确认文件名与我在c ++应用程序中使用的文件名相同,并显示我何时使用SysInternals工具Handle.exe

为什么C#应用会被拒绝访问?据我所知,两者都是以同一个用户身份运行.

Met*_*Man 5

你需要使用以下

CreateViewAccessor(Int64, Int64, MemoryMappedFileAccess);
Run Code Online (Sandbox Code Playgroud)