Столкнулся с неожиданным (для меня) поведением NSIS инсталлеров для 64 битных систем.
Речь идет об обращении к реестру Windows. Долгое время не мог понять почему некоторые значения из реестра я могу получить стандартными инструментами NSIS, а некоторые другие — не могу.
Ответ: в 64 битных системах ключи находятся в нескольких разных разделах — 32 и 64 бита. Из reged для пользователя этих особенностей не видно — они прозрачны. И, соответсвенно, для доступа к этим ключам из NSIS надо использовать модификаторы «SetRegView 64» или «SetRegView 32».
Пример:
П.С. Написал так как на поиск решения этой проблемы потратил довольно много времени. Пользуйтесь!
П.П.С. ${DbgMessageBox} — внутренняя функция для отображения значений во время отладки.
Речь идет об обращении к реестру Windows. Долгое время не мог понять почему некоторые значения из реестра я могу получить стандартными инструментами NSIS, а некоторые другие — не могу.
Ответ: в 64 битных системах ключи находятся в нескольких разных разделах — 32 и 64 бита. Из reged для пользователя этих особенностей не видно — они прозрачны. И, соответсвенно, для доступа к этим ключам из NSIS надо использовать модификаторы «SetRegView 64» или «SetRegView 32».
Пример:
- SetRegView 64
- ReadRegDWORD $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\PowerShell\1" "Install"
- ${DbgMessageBox} "PowerShell Installed: $0"
-
- StrCmp $0 "" psNotInstalled psInstalled
-
- psNotInstalled:
- ${DbgMessageBox} "psNotInstalled"
- Goto PSAbort
- psInstalled:
- ${DbgMessageBox} "psInstalled"
- Goto CONTINUE3
* This source code was highlighted with Source Code Highlighter.
П.С. Написал так как на поиск решения этой проблемы потратил довольно много времени. Пользуйтесь!
П.П.С. ${DbgMessageBox} — внутренняя функция для отображения значений во время отладки.