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

c#-MemoryMappedFile,MemoryMappedFileAccess.ReadExecute做什么,或者什么时候应该使用它?,c#,memory-mapped-files,memory-mapping,C#,Memory Mapped Files,Memory Mapping,我学习了一些关于MemoryMappedFile的基础知识,我看到有一个名为memorymappedficacess.ReadExcute的enum成员 我认为这意味着当你打开一个exe文件时,它(我的程序)会执行它(.exe文件)并读取其中的字节(.exe文件),但当我执行程序时,它会给我一个错误: 对路径的访问被拒绝[UnauthorizedAccessException] 霉菌代码: static void Main(string[] args) { FileSt

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

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

对路径的访问被拒绝[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();
    }

有人能给我解释一下吗?

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

  • 尝试用Read打开,看看这是否解决了您的问题
  • 尝试添加完整文件路径(以防未打开)
  • 打开文件时添加文件的长度
  • 勾选以下三项和一项:

    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();
    }
    
  • 然后检查文件“programe.exe”在文件系统中是否具有相应的权限
  • 根据文档,这只是可执行文件的读取访问权:

    读执行4

    对可以存储和运行可执行代码的文件的读取访问权限


    @好的,我能做些什么来解决这个问题exception@CaiusJard是的,我已经读过了,好的,读和读的区别是什么?谢谢你的回复,但我已经用你的代码更改了我的代码,仍然抛出异常,当我用读替换读执行时,它工作正常,但我想知道读和读的区别是什么,ReadExecute??虽然答案不错,但我认为OP也需要解释。-“MemoryMappedFileAccess.ReadExecute做什么?我应该什么时候使用它?有人能解释一下吗?”不确定。您可能需要设置HandleInheritability。Read Truth可以说ReadExecute对于映射文件没有意义。映射文件用于在进程之间共享内存中的数据,我还没有找到ReadExecute使用的好例子。