虽然看起来您很久以前就找到了解决方法,但我解释了为什么会出现问题以及可以说是更好的解决方案。我在 shadow.exe 中遇到了同样的问题。
如果您使用 Process Monitor 观看,您会发现它实际上是在 C:\Windows\SysWOW64\ 而不是 C:\Windows\system32\ 中查找文件,因为文件系统重定向和您的程序是 32 位进程。
解决方法是针对 x64 而不是 Any CPU 进行编译,或者使用 P/Invoke 暂时怀疑并使用Wow64DisableWow64FsRedirection和 Wow64RevertWow64FsRedirection Win API 函数重新启用文件系统重定向。
internal static class NativeMethods
{
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
}
////////////////
IntPtr wow64backup = IntPtr.Zero;
if (!Environment.Is64BitProcess && Environment.Is64BitOperatingSystem)
{
NativeMethods.Wow64DisableWow64FsRedirection(ref wow64backup);
}
Process.Start(new ProcessStartInfo(@"c:\Windows\System32\tscon.exe", @"0 /dest:console"))
if (!Environment.Is64BitProcess && Environment.Is64BitOperatingSystem)
{
NativeMethods.Wow64RevertWow64FsRedirection(wow64backup);
}
}