c# - MemoryMappedFile,MemoryMappedFileAccess.ReadExecute 做什么或我应该何时使用它?

c# - MemoryMappedFile , what MemoryMappedFileAccess.ReadExecute do or when should i use it?

我学习了一些关于 MemoryMappedFile 的基础知识,我看到有一个 enum 成员叫 MemoryMappedFileAccess.ReadExcute

我认为这意味着当你打开一个 exe 文件时,它(我的程序)执行它(.exe 文件)并读取其中的字节(.exe 文件)但是当我执行程序时它抛出一个错误:

Acceess to the path is denied [UnauthorizedAccessException]

我的代码:

 static void Main(string[] args)
    {
        FileStream fs = new FileStream("programe.exe", FileMode.OpenOrCreate, FileAccess.ReadWrite, 
FileShare.ReadWrite);


        MemoryMappedFile memory = MemoryMappedFile.CreateFromFile(fs, "mapname", 0, 
MemoryMappedFileAccess.ReadExecute,null,0,false);



        MemoryMappedViewAccessor mmr = memory.CreateViewAccessor(0, fs.Length, MemoryMappedFileAccess.Read);






        Console.ReadKey();
    }

谁能给我解释一下吗?

这里有很多东西可以尝试:

  1. 尝试使用阅读打开,看看是否能解决您的问题
  2. 尝试添加完整的文件路径(以防无法打开)
  3. 添加文件打开时的长度

检查下面的三和一:

static void Main(string[] args)
{
    // Try with Read here and Read on your create view to see if anything changes
    FileStream fs = new FileStream("programe.exe", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
    // Set the length of the file here.
    MemoryMappedFile memory = MemoryMappedFile.CreateFromFile(fs, "mapname", fs.Length, MemoryMappedFileAccess.ReadExecute,null,0,false);

    MemoryMappedViewAccessor mmr = memory.CreateViewAccessor(0, fs.Length, MemoryMappedFileAccess.Read);

    Console.ReadKey();
}
  1. 然后检查您的文件 "programe.exe" 在您的文件系统中是否具有适当的权限

根据文档,ReadExecute 只是可执行文件的读取权限:

ReadExecute 4

Read access to the file that can store and run executable code.