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

时间:2017-05-01 23:19:45

标签: powershell registry registrykey

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

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

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

我在64位操作系统上。默认Hive应该是64位,我没有设置或重定向到32位配置单元。

NSIS可执行写入32位Hive。 如果我在ISE中运行PS脚本,它会写入64位配置单元,如同已过时。

所以,我不知道为什么它在NSIS中包装时在WOW6432Node下编写。我需要注意什么?

2 个答案:

答案 0 :(得分:1)

如果您正在运行64位机器的脚本,这将有效。

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

    # put your code here

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

答案 1 :(得分:0)

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

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

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