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

    Столкнулся с неожиданным (для меня) поведением 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} — внутренняя функция для отображения значений во время отладки.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 9
    • 0
      «Инсталлер», «Дистрибутив», «Установщик»… Но никак уж не «инстоллер» )
      • 0
        я тоже хотел написать подобный комментарий, но открыл словарь и посмотрел что Install так и читается (инстол). Хотя согласен — звучит непривычно…
    • 0
      На самом деле все очень просто:
      в 64-битной винде делается разный маппинг в реестре и на файловой системе. Если из 64-битного приложения смотреть в «C:\Windows\System32», то увидишь 64-битные файлы, а если смотреть туда же из 32-битных прог, то быдешь на самом деле видеть «C:\Windows\SysWoW64».
      С реестром примерно похоже — инсталлер 32-битный, он без спец. извратов, вернее, решений, не видит 64-битные ветки
    • 0
      RTFM

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.