You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建MemoryMappedFile时路径访问被拒问题求助

内存映射文件创建时的权限拒绝问题解决

问题场景

创建MemoryMappedFile时,已配置MemoryMappedFileSecurity并以管理员模式运行,但仍抛出**"Access to the path is denied"**错误。

原始代码

var security = new MemoryMappedFileSecurity();
security.SetAccessRule(new AccessRule<MemoryMappedFileRights>(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MemoryMappedFileRights.FullControl, AccessControlType.Allow));

MemoryMappedFile memoryMappedFile = MemoryMappedFile.CreateFromFile(
                     new FileStream(path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite),
                     "MMFName",
                     100000000,  
                     MemoryMappedFileAccess.ReadWrite,  
                     security, 
                     HandleInheritability.None, 
                     false 
                     );

报错堆栈跟踪

at System.IO.MemoryMappedFiles.MemoryMappedFile.CreateCore(SafeFileHandle fileHandle, String mapName, HandleInheritability inheritability, MemoryMappedFileSecurity memoryMappedFileSecurity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, Int64 capacity)
   at System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile(FileStream fileStream, String mapName, Int64 capacity, MemoryMappedFileAccess access, MemoryMappedFileSecurity memoryMappedFileSecurity, HandleInheritability inheritability, Boolean leaveOpen)

解决方案

以下是几个针对性的排查和修复方向:

  • 修正FileStream的访问权限
    内存映射文件的MemoryMappedFileAccess.ReadWrite要求底层FileStream至少拥有ReadWrite权限,当前代码中FileStream用了FileAccess.Write,权限不匹配。修改为:

    new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)
    
  • 避免内存映射文件名称冲突
    全局名称"MMFName"可能已被系统中其他进程占用,导致权限冲突。改用唯一名称:

    string uniqueMapName = $"MMF_{Process.GetCurrentProcess().Id}_{Guid.NewGuid()}";
    
  • 检查底层文件的NTFS权限
    即使配置了MMF的安全规则,目标文件本身的NTFS权限可能限制了访问。右键文件→属性→安全,确认当前管理员账户拥有读取和写入权限。

  • 调整LeaveOpen参数并手动管理流生命周期
    leaveOpen: false会自动关闭FileStream,可能引发文件锁定问题。改用leaveOpen: true,并通过using语句手动管理资源:

    using (var fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
    {
        var security = new MemoryMappedFileSecurity();
        security.SetAccessRule(new AccessRule<MemoryMappedFileRights>(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MemoryMappedFileRights.FullControl, AccessControlType.Allow));
    
        using (var mmf = MemoryMappedFile.CreateFromFile(
            fs,
            "MMFName",
            100000000,
            MemoryMappedFileAccess.ReadWrite,
            security,
            HandleInheritability.None,
            true
        ))
        {
            // 执行MMF相关操作
        }
    }
    

内容的提问来源于stack exchange,提问作者vin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:42:32