为什么 64 位进程写入 32 位注册表配置单元

Why 64bit Process writing to 32bit registry hive

我有一个用 NSIS 脚本包装的 PowerShell 脚本来创建 .exe

PS 脚本将值写入 HKEY_LOCAL_MACHINE\SOFTWARE\FolderName

但是,我注意到它实际上是在写入 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\FolderName

我在 64 位 OS。默认的配置单元应该是 64 位的,我没有将注册表设置或重定向到 32 位配置单元。

可从 NSIS 执行写入 32 位 Hive。 如果我在 ISE 中 运行 PS 脚本,它会写入 64 位配置单元,如预期的那样。

所以,我不知道为什么它在用NSIS包装时在WOW6432Node下写。我需要看什么吗?

据我所知,NSIS 使用两个 Win32 API 来执行进程 ShellExecuteCreateProcess

如果您的操作系统是 64 位,那么它们都可以从 NSIS 32 位进程 运行 64 位进程 (x64)。

您遇到的问题是因为它可能调用了 32 位PS。所以仔细检查那部分。

如果你是运行 64位机器的脚本,这就可以了。

   ${If} ${RunningX64}
        ${DisableX64FSRedirection}
    ${EndIf}

    # put your code here

    ${If} ${RunningX64}
       ${EnableX64FSRedirection}
    ${EndIf}