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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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.08 (от 25 сентября 2021 г.)  
     
     
    Ссылки:
    NSIS: страница загрузкирусификатор ветки 2.xx (без гарантии, что подходит!)2.513.02.1NSIS 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 | Исправлено: Maz, 20:31 01-01-2023
    AngelNet



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG
    вить, а с моим вопросом пока не разбирался?
    я уже начинаю ненавидеть нсис: в теплом ламповом INNO можно декомпилировать билд и скрипт будет как на ладони, и перебрать под себя в два счета, но только не в нсис.


    ----------
    animelist

    Всего записей: 7414 | Зарегистр. 11-03-2004 | Отправлено: 16:08 18-10-2017
    dialmak



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

    Цитата:
     Но в любом случае я бы  вынес задачу перезапуска оси в некую функцию - чего сто раз код дублировать?

    Ну задачу перезапуска внести в функцию вроде не проблема.
     
    Function CompReboot
    MessageBox MB_YESNO|MB_ICONQUESTION "Do you wish to reboot the system?" /SD IDYES +2
    Reboot
    FunctionEnd
     
    Function .onRebootFailed
       MessageBox MB_OK|MB_ICONSTOP "Reboot failed. Please reboot manually." /SD IDOK
    FunctionEnd

     
    А вот по поводу точки - тут сложнее.

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 16:51 18-10-2017
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AngelNet
     
    Пока нет - было полно работы.
     
    dialmak
     
    Ну, как идея - переменная-семафор хранящее состояние, например как номер шага алгоритма. Дошли до рестарта, записали номер шага в файл, перезапустились, проверили факт наличия метки, считали её, выполняемся до следующего рестарта и снова повторяем цикл.  
     
    В своей аппаратуре я так делаю. Но там я храню имя микропрограммы, номер шага и флаги продолжения в энергонезависимом ОЗУ состояния питающемся как от БП, так и от аккумулятора, здесь его роль сыграет контрольный файл с фиксированным именем и положением (для упрощения задачи поиска). Логика такая:  
     
    IF exist file Then read and execute Else continiue to finish End;
     
    По моему этот вариант достаточно прост в реализации и надёжен.

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

    Всего записей: 33134 | Зарегистр. 31-07-2002 | Отправлено: 17:08 18-10-2017
    ZVSRus



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как записать в .ini файл имя пользователя запустившего установку.
    Нужна переменная константа соответствующая имени пользователя.

    Всего записей: 102 | Зарегистр. 13-11-2007 | Отправлено: 19:43 25-10-2017
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZVSRus
     
    Это не проблема. WriteIniStr [NSIS HELP]:
     

    Цитата:
    4.9.2.13 WriteINIStr
     
    ini_filename section_name entry_name value
     
    Writes entry_name=value into [section_name] of ini_filename. The error flag is set if the string could not be written to the ini file.

    раз, из $PROFILE легко выдрать имя пользователя (это один путь, для желающих  повозится), второй и более простой - прочитать переменную среды %USERNAME%, например из CMD:
     
    ExecDos::exec /TOSTACK cmd /c set USERNAME
    Pop $0 /* распишитесь -  имя пользователя в $0 */


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

    Всего записей: 33134 | Зарегистр. 31-07-2002 | Отправлено: 19:52 25-10-2017 | Исправлено: Victor_VG, 20:02 25-10-2017
    ZVSRus



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG
    Прежде чем задать вопрос, справку пролез вдоль и поперёк. Ничего путного не нашел.
    Вот строка:
    WriteINIStr "$EXEDIR\${APP}Portable.ini" "${APP}Portable" "UserName" "%USERNAME%"
    что жирным так не катит.
     
     
    Добавлено:
    Строка:
    WriteINIStr "$EXEDIR\${APP}Portable.ini" "${APP}Portable" "UserName" "$PROFILE"
     
    В файле выглядит так:
    UserName=C:\Users\ZVSRus
     
    Что нужно подставить в место "$PROFILE" что бы в файле выглядело так:
    UserName=ZVSRus

    Всего записей: 102 | Зарегистр. 13-11-2007 | Отправлено: 20:18 25-10-2017
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZVSRus
     
    Да, не пляшет, ну тут есть вариант выполнить запись батником типа:
     
    set USERNAME > <file>
     
    а там этим файлом воспользоваться.  
     
    P.S.
     
    мне вроде исправление глюка (и на 194 продолжение) пришло так что я его тестить пойду. Попил он крови...

     
    Добавлено:
    ZVSRus
     
    Имя пользователя хранится в переменной среды %USERNAME% и её надо как-то прочитать...

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

    Всего записей: 33134 | Зарегистр. 31-07-2002 | Отправлено: 21:24 25-10-2017
    ZVSRus



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG
    Методом тыка решение найдено.
     
    На реальной системе в файле выглядит так:
    UserName=ZVSRus
     
    На виртуальной машине так:
    UserName=User
     
    Вопрос закрыт.

    Всего записей: 102 | Зарегистр. 13-11-2007 | Отправлено: 22:39 25-10-2017
    ZVSRus



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем доброго времени суток!
    Подскажите какая константа соответствует дате и времени суток?
    Если точнее, как прописать в ini файл дату и время компиляции?

    Всего записей: 102 | Зарегистр. 13-11-2007 | Отправлено: 21:57 21-11-2017
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZVSRus
     
    NSIS Help:
     
    5.2 Predefines
     
    5.2.1 ${__FILE__}
    Current script name.
     
    5.2.2 ${__LINE__}
    Current line number.
     
    5.2.3 ${__DATE__}
    Date when the script started compiling according to the current locale.
     
    5.2.4 ${__TIME__}
    Time when the script started compiling according to the current locale.
     
    5.2.5 ${__TIMESTAMP__}
    Date & time of the last modification to the script file according to the current locale

     
    сам сто лет этим пользуюсь
     
    Добавлено:
    А дальше просто WriteIniStr ... var

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

    Всего записей: 33134 | Зарегистр. 31-07-2002 | Отправлено: 23:29 21-11-2017
    ZVSRus



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

    Цитата:
    NSIS Help:

    Пользавался NSIS_Help_1.2.chm, NSIS_Help_1.3.chm, NSIS_Help_1.5.chm, ничего подходящего не нашел
    (или плохо смотрел). Но тут оказывается есть еще NSIS_Руководство_пользователя.pdf. Чем все же лучше пользоваться?
     

    Цитата:
    А дальше просто WriteIniStr ... var
     
    Ну если сами пользуетесь, значит у вас в скрипте данные строки есть. А не проще было одной строкой показать как написать. Или на данном форуме не принято примеры показывать.
     
    Не так давно прошёлся здесь и на oszone.net с первой страницы до последней, найти реальные примеры, раз, два и обсчитался, но отправить в справку, это через раз, читать устал!
     
    Спасибо за подсказку куда нужно было смотреть, а дальше, как и в предыдущем посте методом тыка сделал как надо. Просто не знал что пишется ${__DATE__} именно так, а не ${DATE}, и не $DATE.  
     
    PS: Извиняюсь, но если взялись подсказывать, то подсказывайте вразумительно, желательно с примерами, а не в справку носом тыкать. Иной раз люди прочитавшие справку все ровно не до гоняются, куда, чего, и как. УДАЧИ! Тема закрыта.
     
     

    Всего записей: 102 | Зарегистр. 13-11-2007 | Отправлено: 10:08 22-11-2017
    Sanch8



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZVSRus
    Простой пример:

    Код:
    !define /date date "%H:%M (%d %b, %Y)"
    Name "Example"
     
    OutFile "example.exe"
     
    Section ""
        MessageBox MB_OK|MB_ICONINFORMATION "Время и дата компиляции ${date}"
        WriteINIStr "$EXEDIR\time.ini" main time "${date}"
    SectionEnd


    Всего записей: 125 | Зарегистр. 29-01-2012 | Отправлено: 13:02 22-11-2017 | Исправлено: Sanch8, 13:13 22-11-2017
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZVSRus
     
    Данные переменные описаны в штатном хелпе NSIS 2.х, переводчик мог просто их "не заметить" используя старую версию где "их не было". А пример не вопрос, сам так делаю, только у меня  эти переменные используются для маркировки времени компиляции (код старый, но рабочий, из моего SDK):
    CDex. Тут вы увидите и то, как задать структуру VERSION_INFO (для NSIS проектов это редко кто делает).
     

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

    Всего записей: 33134 | Зарегистр. 31-07-2002 | Отправлено: 13:16 22-11-2017
    Sanch8



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZVSRus
    Можно и так, как посоветовал Victor_VG:

    Код:
    !define /date date "${__TIME__} (${__DATE__})"

    Всего записей: 125 | Зарегистр. 29-01-2012 | Отправлено: 13:40 22-11-2017 | Исправлено: Sanch8, 13:41 22-11-2017
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sanch8
     
    Эти переменные не нужно определять так это переменные времени компиляции значение которых автоматически генерируется компилятором. Простое решение - в секцию POST вписываем строки:
     
    WriteIniStr "<ini_fille_full_patch>" "<section_name>" "<value_name>" "${__DATE__}"
     
    или  
     
    WriteIniStr "<ini_fille_full_patch>" "<section_name>" "<value_name>" "${__TIME__}"
     
    или
     
    WriteIniStr "<ini_fille_full_patch>" "<section_name>" "<value_name>" "${__TIME__} ${__DATE__}"
     
    например:
     
    WriteIniStr "$INSTDIR\app.ini" "GENERAL" "Compile" "${__TIME__} ${__DATE__}"
     
    и после завершения копирования файлов и чистки мусора (если мы задали эти операции) компилятор запишет в указанный нами INI файл время и дату сборки инсталлятора. Это простейшее решение задачи.

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

    Всего записей: 33134 | Зарегистр. 31-07-2002 | Отправлено: 14:09 22-11-2017 | Исправлено: Victor_VG, 14:15 22-11-2017
    Sanch8



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

    Всего записей: 125 | Зарегистр. 29-01-2012 | Отправлено: 14:34 22-11-2017
    Victor_VG



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

    Цитата:
    Здесь для удобства, не надо писать длинные строки предопределения

    А зачем их писать если для переменных времени компиляции это вообще делать не нужно, более того нам они доступны только для чтения? Хотите сделать код более читаемым? Уберите из него трудно читаемые фрагменты алгоритма, оставьте комментарии, разбейте алгоритм и код на секции меньшей длины и поручите им конкретные задачи. Незачем всё валить в одну кучу, а то сами при отладке запутаетесь.  
     
    Ваше предложение в данном случае вызовет противоположные чем вы задумали последствия - пытаясь упростить чтение и добавив лишние определения в хедер вы получите резкое усложнение исходного кода - раз, увеличение времени поиска ошибок и отладки два, увеличение времени компиляции и снижение быстродействия выходного кода - три, недовольство пользователей вашей работой - четыре, да и сами со временем при необходимости его переделки будете с трудом восстанавливать его алгоритм - пять. Не слишком ли велика цена сомнительного "удобства"?

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

    Всего записей: 33134 | Зарегистр. 31-07-2002 | Отправлено: 15:38 22-11-2017
    ZVSRus



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG, Sanch8
    Спасибо, сделал после первого сообщения
     
    WriteINIStr "$EXEDIR\${APP}Portable.ini" "${APP}Portable" "Date" "${__DATE__}  |  ${__TIME__}"
     
    в ini файле выглядит так:
     
    Date=22.11.2017  |  16:30:01  

    Всего записей: 102 | Зарегистр. 13-11-2007 | Отправлено: 16:42 22-11-2017
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZVSRus
     
    Да, в INI мы запишем то значение которое определено последним параметром команды WriteIniStr. Правда на стоит помнить про ограничения ОС на размер INI файла <= 64K которые накладываются функциями WritePrivateProfileString() и GetPrivateProfileInt(), на размер строки равный 260 символов ANSI или 2k в UNICODE накладываемый WriteProfileString() из WinAPI с одной стороны, и на ограничения длинны строки скрипта 1k/8k (специальная версия NSIS).

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

    Всего записей: 33134 | Зарегистр. 31-07-2002 | Отправлено: 17:44 22-11-2017
    Sanch8



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG
    Я так и не понял, что сиё ваше изложение, в примере простого кода вас зацепило? Я же написал как вариант!!!
     

    Всего записей: 125 | Зарегистр. 29-01-2012 | Отправлено: 11:36 23-11-2017 | Исправлено: Sanch8, 11:44 23-11-2017
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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