gpt4 book ai didi

c# - MemoryMappedFile.CreateFromFile 总是抛出 UnauthorizedAccessException

转载 作者:行者123 更新时间:2023-11-30 19:00:44 36 4
gpt4 key购买 nike

我知道 .NET 4.0 处于测试阶段,但我希望有人对此有解决方案。我正在尝试从 DLL 创建内存映射文件:

FileStream file = File.OpenRead("C:\mydll.dll");
using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateFromFile(file,
"PEIMAGE", 1024 * 1024, MemoryMappedFileAccess.ReadExecute))
{
using (MemoryMappedViewStream viewStream = mappedFile.CreateViewStream())
{
// read from the view stream
}
}

不幸的是,无论我做什么,我总是得到一个UnauthorizedAccessExceptionMSDN documentation状态:

The operating system denied the specified access to the file; for example, access is set to Write or ReadWrite, but the file or directory is read-only.

我已经使用 Sysinternals Process Monitor 监控了我的应用程序,这表明该文件确实已成功打开。我也试过内存映射其他非 DLL 文件,但结果相同。

最佳答案

好吧,我有一个基于上面的示例,它运行时没有异常。我做了两个重要的改变:

  • 我只在创建 MemoryMappedFile 时指定了 MemoryMappedFileAccess.Read。您已打开它进行阅读,因此您只能阅读。我还没有尝试通过更改 FileStream 的打开方式来修复它以允许执行。
  • 我已经使 CreateViewStream 调用也明确使用了 MemoryMappedFileAccess.Read。我不确定它为什么不自己使用现有的访问权限,但我们开始吧。

完整程序:

using System.IO;
using System.IO.MemoryMappedFiles;

class Test
{
static void Main()
{
FileStream file = File.OpenRead("Test.cs");
using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateFromFile
(file, "PEIMAGE", file.Length, MemoryMappedFileAccess.Read, null, 0, false))
{
using (var viewStream = mappedFile.CreateViewStream
(0, file.Length, MemoryMappedFileAccess.Read))
{
// read from the view stream
}
}
}
}

关于c# - MemoryMappedFile.CreateFromFile 总是抛出 UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1570624/

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