我必须从Windows
或System32
中SysWOW64
目录中存储的文件中读取内容。为什么它存储在那里以及它最终存在于哪一个并不取决于我,但我检查注册表以获取表示有效路径的字符串。它通常是C:\Windows\System32\FileName.Sys
我很久以前写了一个包装来处理这个问题,直到最近才工作正常。但是当我升级一个项目以使用VS2013并设置' Prefer 32-bit'标志,文件检查突然开始返回false
if (!File.Exists(sysFilePath)) throw new FileNotFoundException(....
当我关闭旗帜时,它会再次开始工作。它正在寻找的文件肯定存在,这使我认为存在某种权限问题。以管理员身份运行此操作无效,文件检查仍然返回false。
如果应用程序是构建的,那么任何人都知道对访问System32
的权限进行了更改,而对于没有它的Prefer 32位,AnyCPU是否会被禁用?或者也许是.NET或Windows在一个看起来与我指定的目录不同的目录下做什么?
答案 0 :(得分:1)
似乎您正在尝试在64位计算机上运行已编译的二进制文件。如果使用Prefer 32位标志,CLR会将IL转换为x86指令,如果可能(https://stackoverflow.com/a/12066861/3927447)而不是使用本机架构。
当程序在64位系统中以32位模式运行时,某些系统路径会被虚拟化。例如,文件系统中的“真实”系统32被重定向到SysWOW64文件夹。因此,当您尝试使用system32的原始路径打开文件时,您无法在那里找到它。
您应该考虑使用其他逻辑来确定要打开的文件的位置。并且,如果可能,在本机子系统上执行代码以跳过虚拟化步骤。