Ошибка записи раздела реестра с помощью NSIS

У меня есть относительно простой NSIS-установщик, которому нужно записать некоторые ключи в реестр. К сожалению, это не работает. Соответствующие части кода:

RequestExecutionLevel admin

Function .onInit
  WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" "" ""
FunctionEnd

Я так понимаю, .oninit называется в каждом случае? Тем не менее, после выполнения .exe этого установщика я не вижу свой новый ключ «LocalDump». Что здесь может быть не так?

Спасибо!


person Elmi    schedule 01.02.2019    source источник
comment
64-битная винда?   -  person Anders    schedule 01.02.2019
comment
@ Андерс да, действительно...   -  person Elmi    schedule 01.02.2019


Ответы (1)


64-разрядная версия Windows имеет два "представления" реестра. а 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 выполняется всегда, но вы не должны вносить изменения в систему там, потому что пользователь может отменить установку. Вы должны выполнять большинство операций, связанных с установкой, в Sections.

person Anders    schedule 01.02.2019