为什么 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 来执行进程 ShellExecute 和 CreateProcess
如果您的操作系统是 64 位,那么它们都可以从 NSIS 32 位进程 运行 64 位进程 (x64)。
您遇到的问题是因为它可能调用了 32 位PS。所以仔细检查那部分。
如果你是运行 64位机器的脚本,这就可以了。
${If} ${RunningX64}
${DisableX64FSRedirection}
${EndIf}
# put your code here
${If} ${RunningX64}
${EnableX64FSRedirection}
${EndIf}
我有一个用 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 来执行进程 ShellExecute 和 CreateProcess
如果您的操作系统是 64 位,那么它们都可以从 NSIS 32 位进程 运行 64 位进程 (x64)。
您遇到的问题是因为它可能调用了 32 位PS。所以仔细检查那部分。
如果你是运行 64位机器的脚本,这就可以了。
${If} ${RunningX64}
${DisableX64FSRedirection}
${EndIf}
# put your code here
${If} ${RunningX64}
${EnableX64FSRedirection}
${EndIf}