Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Nullsoft Scriptable Install System | NSIS

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

Открыть новую тему     Написать ответ в эту тему

Nep



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

 
NSIS (Nullsoft Scriptable Install System)
Скриптовая система создания инсталляционных пакетов от авторов Winamp

Основные характеристики:
 
  • Размер дистрибутива около 1,5 МБ
  • Наличие в базовом пакете файлов с примерами и подробной справки
  • Чрезвычайная гибкость при создании инсталляций для своих программ
  • Открытый исходный код
  • Использование различных алгоритмов сжатия (ZLIB, BZIP2, LZMA)
  • Наличие различных плагинов
     
    Новейшая версия ветки 2.х: NSIS 2.51 (от 1 апреля 2016 г., статус ветки - Old Releases)
    Новейшая версия ветки 3.х: NSIS 3.10 (от 30 марта 2024 г.)  
     
     
    Ссылки:
    NSIS: страница загрузкирусификатор ветки 2.xx (без гарантии, что подходит!)2.513.10NSIS 3 Pre-releaseNSIS 2 Pre-releaseисходники (SVN)
     
    Дополнительно: [ плагины, примеры и полезности ] • [ форум разрабочиков ] • [ Wiki ]
     
    Редактор для скриптового языка NSIS: [ скачать ] • [ домашняя страница ]
     
    NSIS Unpacker
    7-zip начиная с версии 4.40 beta поддерживает распаковку из некоторых типов инсталляций.  
    Обратите внимание, что 7za не поддерживает распаковку.
     
    Полноценного русификатора пока нет, но кто хочет, может перевести сообщения в исходных текстах NSIS и скомпилировать всё заново – это единственный корректный вариант. Из файлов поддаётся корректному переводу только меню интегратора NSIS, поскольку там HTML, а остальные переводы – это в основном "русификаторы" с непредсказуемыми последствиями применения.
     
    64-х битное развитие идей NSIS. В разработке, аннотация разработчика nsisbi.
     
    Просьба к тем, кто будет править шапку, сначала сверяться с http://nsis.sourceforge.net/Main_Page и не выдавать желаемое за действительное.

  • Всего записей: 41940 | Зарегистр. 24-06-2001 | Отправлено: 14:21 06-10-2001 | Исправлено: DimmY, 11:10 31-03-2024
    0utC4St



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG,
    // В примере реальный ключ установленного WinRAR
     

    Код:
     
    Name "myprog"
    OutFile "myprog.exe"
    RequestExecutionLevel admin
    SilentInstall silent
     
    InstallDirRegKey "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver" "InstallLocation"  
     
    Section
    MessageBox MB_OK "$INSTDIR"
    SectionEnd

    И в ответ пустота или ЧЯДНТ ?
     
    Ничто конечно же не мешает взять какой-нибудь ключ из HKCU и не е..ть мозг, но надо таки освоить эту тонкость.

    ----------
    Unchecky - скажи нет Adware на этапе инсталляции

    Всего записей: 2221 | Зарегистр. 26-12-2006 | Отправлено: 00:41 24-05-2014 | Исправлено: 0utC4St, 01:38 24-05-2014
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0utC4St
     
    Так дефайны-то не определены. Вот пример скрипта сгененрированного HM NIS 2.0.3 и там мы видим что определены три переменных:
     
    !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\AppMainExe.exe"
    !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
    !define PRODUCT_UNINST_ROOT_KEY "HKLM"
     
    которые стуб использует для поиска пути в Реестре. Если их нет он может что угодно оттуда прочитать, т.е. мусор. Что мы и видим.

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 33230 | Зарегистр. 31-07-2002 | Отправлено: 00:56 24-05-2014
    0utC4St



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG,
    Исправил
    Результат тот же.

    Всего записей: 2221 | Зарегистр. 26-12-2006 | Отправлено: 01:11 24-05-2014 | Исправлено: 0utC4St, 01:13 24-05-2014
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0utC4St
     
    Стоп, стоп, это я уже сплю. Это штука работать-то не должна ибо если заглянуть в справку там записано:
     
    Language strings and variables cannot be used with InstallDirRegKey.
     
    - т.е. в данном операторе нужно прямо указывать путь в Реестре без каких либо переменных, а потому просто пишем оператор:
     
    InstallDirRegKey "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver" "InstallLocation"
     
    так значение считается правильно.

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 33230 | Зарегистр. 31-07-2002 | Отправлено: 01:27 24-05-2014 | Исправлено: Victor_VG, 01:37 24-05-2014
    0utC4St



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG, весь код ваш и мой работает верно, НО только на x86


    ----------
    Unchecky - скажи нет Adware на этапе инсталляции

    Всего записей: 2221 | Зарегистр. 26-12-2006 | Отправлено: 01:36 24-05-2014
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0utC4St
     
    Тогда надо использовать х64 редакцию NSIS чтобы уйти от виртуализации.

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 33230 | Зарегистр. 31-07-2002 | Отправлено: 01:39 24-05-2014
    0utC4St



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    При использовании NSIS x64 код работает, но, естественно, только на x64
     
    Господа, кто в курсе как штатными средствами "уйти от вирутализации" (см. последнии 8-9 сообщений темы)?

    Всего записей: 2221 | Зарегистр. 26-12-2006 | Отправлено: 01:55 24-05-2014 | Исправлено: 0utC4St, 01:57 24-05-2014
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0utC4St
     
    Можно, конечно, но придётся использовать логику определения платформы в .onInit и уже там менять $INSTDIR. Я похожие номера когда-то проделывал с помощью плагина GetVersion, но он не будет работать на восьмёрке и выше. Придётся прикинуть варианты.

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 33230 | Зарегистр. 31-07-2002 | Отправлено: 02:37 24-05-2014
    MKN



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0utC4St

    Цитата:
    как выйти из ситуации стандартными средствами?

    Всё давно придумано и вся сеть завалена примерами...
    Надо использовать хедер x64.nsh
    И при необходимости логику для $INSTDIR  Т.е. -  
    ${If} ${RunningX64}
    бла-бла

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 10:40 24-05-2014 | Исправлено: MKN, 10:41 24-05-2014
    leserg73



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть еще команда SetRegView для переключения операций в реестре 64-бит или 32-бит. Также можно использовать совместно хедером x64.nsh...
    ${If} ${RunningX64}
      SetRegView 64
      бла-бла
    ${Else}
      SetRegView 32
      бла-бла
    ${EndIf}

    Всего записей: 116 | Зарегистр. 27-07-2008 | Отправлено: 11:27 24-05-2014
    0utC4St



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN, leserg73
    Спасибо! Вы абсолютно правы, для унификации кода достаточно этого:

    Код:
     
    !include "x64.nsh"
    !include "LogicLib.nsh"
     
    Function .onInit
    ${If} ${RunningX64}  
      SetRegView 64  
     ${Else}  
      SetRegView 32  
    ${EndIf}
    FunctionEnd
     

     
     
    И можно работать с реестром как ни в чём не бывало.

    ----------
    Unchecky - скажи нет Adware на этапе инсталляции

    Всего записей: 2221 | Зарегистр. 26-12-2006 | Отправлено: 11:45 24-05-2014 | Исправлено: 0utC4St, 12:00 24-05-2014
    FanIT

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет. Использую код из руководства для определение SID текущего пользователя, но возвращается пустое значение.
    Вот код:
     
    !define GetUserSID "!insertmacro CallGetUserSID"
    !macro CallGetUserSID USERNAME SID
          System::Store S
          StrCpy '$0' '${USERNAME}'
          StrCmp '$0' '' 0 +2
          ExpandEnvStrings '$0' "%USERNAME%"
          System::Call "*(&t1024)i.r1"
          System::Call "advapi32::LookupAccountName(tn,tr0,ir1,*i1024,tn,*i1024,*in)i.r0"
          IntCmp $0 1 0 +2 +2
          System::Call "advapi32::ConvertSidToStringSid(ir1,*t.s)"
          IntCmp $0 1 +2 0 0
          Push error
          System::Free $1
          System::Store L
          Pop "$R1"
    !macroend
     
    Мой код вызова:
     
    ${GetUserSID} "" $R7
     
    Что я опять не так делаю?

    Всего записей: 69 | Зарегистр. 27-12-2013 | Отправлено: 21:54 29-05-2014
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FanIT
     
    Параметр макроса не может быть пустым, а у вас в вызове в макрос (по факту это подпрограмма) передаётся пустое значение $USERNAME, а потому и результат предсказуем - такого пользователя в системе нет.


    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 33230 | Зарегистр. 31-07-2002 | Отправлено: 22:05 29-05-2014 | Исправлено: Victor_VG, 22:07 29-05-2014
    MKN



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FanIT
    это известный код из справочника :

    Цитата:
    !include "MUI2.nsh"  
       
     !insertmacro MUI_PAGE_INSTFILES  
     !insertmacro MUI_LANGUAGE "Russian"  
       
     ShowInstDetails show  
     OutFile GetUserSID-Test.exe  
     Caption "GetUserSID"  
       
     !define GetUserSID "!insertmacro CallGetUserSID"  
     !macro CallGetUserSID SID  
         System::Store S  
         System::Call "kernel32::GetComputerName(t.r0, *i1024 r4)i.r2"  
         System::Call "advapi32::GetUserName(t.r1, *i1024 r5)i.r3"  
         ${Unless} $2 = 0  
         ${AndUnless} $3 = 0  
                System::Call "*(&t1024)i.r5"  
                System::Call "advapi32::LookupAccountName(t'\\$0',tr1,ir5,*i1024,t.r4,*i1024,*i.r0)i.r2"  
                ${Unless} $2 = 0  
                       System::Call "advapi32::ConvertSidToStringSid(ir5,*t.s)"  
                ${Else}  
                       Push error  
                ${EndUnless}  
         ${Else}  
                Push error  
         ${EndUnless}  
         System::Store L  
         Pop "${SID}"  
     !macroend  
       
     Section  
       ${GetUserSID} $R5  
       MessageBox MB_ICONINFORMATION|MB_OK "$R5" IDOK  
     SectionEnd


    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 23:04 29-05-2014
    FanIT

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG
    Так в справочники написано. Если передается пустое значение, то возвращается sid текущего пользователя. Что мне собственно и нужно.
     
    MKN
    Я его оттуда и взял.

    Всего записей: 69 | Зарегистр. 27-12-2013 | Отправлено: 23:54 29-05-2014
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FanIT
     
    я же вам сразу сказал что параметр USERNAME не может быть пустым.

    Цитата:
    ShowInstDetails show
     OutFile GetUserSID-Test.exe
     Caption "GetUserSID"
     
     !define GetUserSID "!insertmacro CallGetUserSID"
    !macro CallGetUserSID USERNAME SID NAME
          System::Store S
          StrCpy $0 "${USERNAME}"
          StrCpy ${NAME} $0
          StrCmp $0 "" +2
          ReadEnvStr $0 USERNAME
          System::Call "*(&t1024)i.r1"
          System::Call "advapi32::LookupAccountName(tn,tr0,ir1,*i1024,tn,*i1024,*in)i.r0"
          IntCmp $0 1 0 +2 +2
          System::Call "advapi32::ConvertSidToStringSid(ir1,*t.s)"
          IntCmp $0 1 +2 0 0
          Push error
          System::Free $1
          System::Store L
          Pop ${SID}
    !macroend
     
     Section
       ${GetUserSID} "" $R5 $R2
       MessageBox MB_ICONINFORMATION|MB_OK "User is: $R2 $\nSID is: $R5" IDOK
    SetAutoClose true
     SectionEnd

    я тут лишнее прибрал, ну и поправил ошибки в коде. Так работает, попробуйте найти и объяснить нам свои ошибки.
     
    P.S.
     
    MKN - не подсказывай, FanIT надо понять как это работает, тогда эти знания станут его, а иначе вся работа насмарку..
    .

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 33230 | Зарегистр. 31-07-2002 | Отправлено: 01:34 30-05-2014 | Исправлено: Victor_VG, 02:30 30-05-2014
    FanIT

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG
    MKN
    Спасибо вам! Теперь понял.
     

    Код:
     
     !define GetUserSID "!insertmacro CallGetUserSID"
    !macro CallGetUserSID USERNAME SID
          System::Store S
          StrCpy $0 "${USERNAME}"
          StrCmp $0 "" +2
          ReadEnvStr $0 USERNAME
          System::Call "*(&t1024)i.r1"
          System::Call "advapi32::LookupAccountName(tn,tr0,ir1,*i1024,tn,*i1024,*in)i.r0"
          IntCmp $0 1 0 +2 +2
          System::Call "advapi32::ConvertSidToStringSid(ir1,*t.s)"
          IntCmp $0 1 +2 0 0
          Push error
          System::Free $1
          System::Store L
          Pop ${SID}
    !macroend
     
    ExpandEnvStrings $R4 "%USERNAME%"
     
    ${GetUserSID} $R4 $R5
     

    Всего записей: 69 | Зарегистр. 27-12-2013 | Отправлено: 18:32 30-05-2014
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FanIT
     
    Поняли в чём были ошибки? Хорошо.

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 33230 | Зарегистр. 31-07-2002 | Отправлено: 18:38 30-05-2014
    FanIT

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет! Не подскажите. Есть какой-нибудь аналог утилите reg2nsis? Она почему-то конвертирует только часть ключей реестра из reg файла.

    Всего записей: 69 | Зарегистр. 27-12-2013 | Отправлено: 21:17 05-06-2014
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FanIT
     
    Смотря какая версия. Утилита да, не идеальна, но пользоваться можно. Последняя её версия у автора Reg2Nsis v0.14, новее не видел...

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 33230 | Зарегистр. 31-07-2002 | Отправлено: 21:41 05-06-2014
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Компьютеры » Программы » Nullsoft Scriptable Install System | NSIS


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru