所有用于访问文件的C#方法,例如在WOW64模式下运行时,FileInfo(),FileVersionInfo.GetVersionInfo(),FileStream()等可能会误导您,即该应用程序已编译为x86但在x64上运行。您可以在\ Windows \ System32 \和\ Windows \ SysWOW64 \中拥有完全相同的文件,或者在\ Windows \ System32 \中没有文件,但是当您的代码尝试在\ Windows \ System32 \中访问时,将使用\ Windows \ SysWOW64 \中的文件副本,而不指示发生了重定向。是否有出于任何原因(WOW64或其他)指示这种重定向的方法?蛮力是要检查WOW64执行并检查\ Windows \ System32 \的路径 但我希望系统为我处理。另外可能还会有其他一些特殊情况。
答案 0 :(得分:1)
您可以使用Wow64DisableWow64FsRedirection
禁用文件系统重定向例如=>
bool bWow64 = false;
IsWow64Process(Process.GetCurrentProcess().Handle, out bWow64);
if (bWow64)
{
IntPtr OldValue = IntPtr.Zero;
bool bRet = Wow64DisableWow64FsRedirection(out OldValue);
}
使用:
[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern bool IsWow64Process(IntPtr hProcess, out bool Wow64Process);
[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern bool Wow64DisableWow64FsRedirection(out IntPtr OldValue);