我正在尝试使用 ShellExecute 从我的 32 位应用程序打开 64 位 Regedit。
我在 Process Explorer 中注意到,如果我正常打开 Regedit,它会显示图像是 64 位的,但是如果我使用 ShellExecute 从我的 32 位应用程序中打开 C:\Windows\Regedit.exe
, Process Explorer 说图像是 32 位的。
(它确实在 Windows 目录中打开注册表编辑器,而不是在 SysWOW64 中)
我发现如果我在调用 ShellExecute 之前使用 Wow64DisableWow64FsRedirection
函数,它会打开它的 64 位图像。但是我的应用程序无法在 32 位 XP 上运行。
令我困惑的是,无论我以何种方式打开 regedit,它们都驻留在 C:\Windows
中,并且都是相同的可执行文件。同一个可执行文件怎么会有两种不同的图像类型?以及如何在没有 Wow64DisableWow64FsRedirection
的情况下打开 64 位版本?
最佳答案
您需要使用 Is64BitProcess 检测您是否处于 64 位进程中,如果是,则访问 %windir%\Sysnative
,因为它指向“真实”System32 文件夹,以便 32 位应用程序需要访问 64 位 System32 文件夹。
string system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32");
if(Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
// For 32-bit processes on 64-bit systems, %windir%\system32 folder
// can only be accessed by specifying %windir%\sysnative folder.
system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative");
}
关于c++ - 从 32 位应用程序打开 64 位注册表编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12233396/