2017-05-01 49 views
0

我有一个PowerShell脚本,我用NSIS脚本包创建的.exe为什么64位进程写入32位注册表配置单元

PS脚本HKEY_LOCAL_MACHINE\SOFTWARE\FolderName

写入值。然而,我注意到,它实际上是写HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\FolderName

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

NSIS可执行写入32位Hive。 如果我在ISE中运行PS脚本,它将写入64位配置单元,如所示。

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

+0

默认配置单元不取决于操作系统的位元,而是来自过程位元。 NSIS很可能调用32位PowerShell。 – PetSerAl

+0

@PetSerAl我认为你是对的。在研究过程中,我注意到了这一点,但并不确定,因为我对PS/NSIS非常陌生。我怎样才能从64位实例调用它? – Omar

+0

我对NSIS并不熟悉,所以在这里我无法帮到你。 – PetSerAl

回答

1

如果你正在运行64位机器的脚本,这将工作。

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

    # put your code here 

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

按我的知识,NSIS使用两个的Win32 API执行过程的ShellExecuteCreateProcess的

如果你的操作系统是64位,则两者可以运行64个程序(64) NSIS 32位进程。

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

相关问题