Pull to refresh

О некоторых особенностях написания дистрибутивных пакетов на NSIS для х64 систем

Reading time1 min
Views3.2K
Столкнулся с неожиданным (для меня) поведением NSIS инсталлеров для 64 битных систем.

Речь идет об обращении к реестру Windows. Долгое время не мог понять почему некоторые значения из реестра я могу получить стандартными инструментами NSIS, а некоторые другие — не могу.

Ответ: в 64 битных системах ключи находятся в нескольких разных разделах — 32 и 64 бита. Из reged для пользователя этих особенностей не видно — они прозрачны. И, соответсвенно, для доступа к этим ключам из NSIS надо использовать модификаторы «SetRegView 64» или «SetRegView 32».

Пример:
  1.  SetRegView 64
  2.  ReadRegDWORD $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\PowerShell\1" "Install"
  3.  ${DbgMessageBox} "PowerShell Installed: $0"
  4.  
  5.  StrCmp $0 "" psNotInstalled psInstalled
  6.  
  7.  psNotInstalled:
  8.     ${DbgMessageBox} "psNotInstalled"
  9.     Goto PSAbort
  10.  psInstalled:
  11.     ${DbgMessageBox} "psInstalled"
  12.     Goto CONTINUE3
* This source code was highlighted with Source Code Highlighter.


П.С. Написал так как на поиск решения этой проблемы потратил довольно много времени. Пользуйтесь!
П.П.С. ${DbgMessageBox} — внутренняя функция для отображения значений во время отладки.
Tags:
Hubs:
+3
Comments9

Articles