我有一个相对简单的NSIS安装程序,需要将一些注册表项写入注册表。不幸的是,这不起作用。相关代码部分为:
RequestExecutionLevel admin
Function .onInit
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" "" ""
FunctionEnd
据我了解,在每种情况下都调用.oninit吗?但是,在执行此安装程序的.exe之后,我看不到新的密钥“ LocalDump”。这有什么问题吗?
谢谢!
答案 0 :(得分:1)
64位Windows具有two registry "views",而32位应用程序默认情况下会看到32位视图。您可以使用SetRegView
指令来强制32位NSIS安装程序写入64位视图:
!include x64.nsh
!include LogicLib.nsh
Section
${If} ${RunningX64}
SetRegView 64
WriteRegStr ... value for 64-bit systems
SetRegView LastUsed
${Else}
WriteRegStr ... value for 32-bit systems
${EndIf}
SectionEnd
.onInit
始终执行,但是您不应该在此真正更改系统,因为用户可能会取消安装。您应该在Section
s中执行大多数与安装相关的操作。