gpt4 book ai didi

c# - 为什么在从 C# 而不是从 C++ 访问内存映射文件时会出现拒绝访问异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:32 25 4
gpt4 key购买 nike

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

    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();
}

在第一个 using 语句中,我得到一个 UnauthorizedAccessException,上面写着“访问路径被拒绝。”

我能够单步执行并确认文件名与我在 C++ 应用程序中使用的文件名相同,并且在我使用 SysInternals 工具 Handle.exe 时显示该文件名

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

最佳答案

你需要使用以下内容

CreateViewAccessor(Int64, Int64, MemoryMappedFileAccess);

关于c# - 为什么在从 C# 而不是从 C++ 访问内存映射文件时会出现拒绝访问异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11801480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com