提供有关文件重定向信息的可靠方法吗?

时间:2019-07-06 19:27:02

标签: c# .net

所有用于访问文件的C#方法,例如在WOW64模式下运行时,FileInfo(),FileVersionInfo.GetVersionInfo(),FileStream()等可能会误导您,即该应用程序已编译为x86但在x64上运行。您可以在\ Windows \ System32 \和\ Windows \ SysWOW64 \中拥有完全相同的文件,或者在\ Windows \ System32 \中没有文件,但是当您的代码尝试在\ Windows \ System32 \中访问时,将使用\ Windows \ SysWOW64 \中的文件副本,而不指示发生了重定向。是否有出于任何原因(WOW64或其他)指示这种重定向的方法?蛮力是要检查WOW64执行并检查\ Windows \ System32 \的路径 但我希望系统为我处理。另外可能还会有其他一些特殊情况。

1 个答案:

答案 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);