如何在Win64上禁用重定向

8

我想将 c:\Windows\regedit.exe复制到与 regedit2.exe相同的目录中,但是当我尝试复制时,我遇到了一个错误,说找不到regedit.exe文件,有时会将其复制到windows\SysWOW64目录下。实际上,我知道win64正在重定向它,但是如何禁用重定向并将windows/regedit.exe复制到windows/regedit2.exe?我的示例代码如下:

if(File.Exists(@"c:\Windows\regedit.exe"))
try
{
File.Copy(@"c:\Windows\regedit.exe", @"c:\Windows\regedit2.exe", true);
}
catch (Exception ex){}

有没有人可以帮我?
1个回答

15

有可用的Win32函数,可以禁用和启用重定向。

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);

例子:

IntPtr wow64Value = IntPtr.Zero;

// Disable redirection.
Wow64DisableWow64FsRedirection(ref wow64Value);

// Do whatever you need
// .....................

// Re-enable redirection.
Wow64RevertWow64FsRedirection(wow64Value);

1
谢谢,我不确定是否有一种在纯.NET中实现这个的方法? - WHol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接