Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Ответить
Настройки темы
.: NSIS - все вопросы :. часть 2.

Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: kotkovets
Дата: 07-06-2020
Описание: NSIS 3.05


Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения.


Описание:
читать дальше »
NSIS (Nullsoft Scriptable Install System) - профессиональная система для создания инсталляторов в среде Windows с октрытым исходным кодом. При своем малом размере система очень гибкая, и при с широкими возможностями. Генерируемый ею инсталлятор также имеет очень маленький размер и идеально подходит для распространения продукта через Интернет.


Текущая версия: NSIS 3.05 от 15 декабря 2019 года
Скачать | Архив сборок версии

Первая часть этой темы
Скачать первую часть этой темы одним архивом

ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов:
Справочник по NSIS - создан силами нашего сообщества.
Руководство пользователя. Перевод – Поляков А.В, зеркало

Документация

Утилиты разработчика
Расширение функциональности

Примеры скриптов на нашем форуме
Скрипт NSIS для перепаковки AIMP2+Сборки
Тема для Notepad++(пример парсинга XML)

Достоинства
читать дальше »


◦ Очень маленький размер установочного блока (около 34 Кбайт)
◦ zlib, bzip2 и LZMA-сжатие
◦ Гибкая система скриптов (спецально разработанная для инсталляторов)
◦ Поддержка многоязычности, точнее 53 языка, есть возможность ввода нового языка
◦ Поддержка плагинов
◦ Скрипт Препроцессор
◦ Создание Web-инсталляторов


Ещё немного полезной информации:
читать дальше »

▫ История создания установщика

NSIS создан как альтернатива InstallShield, предназначенного для коммерческих продуктов.

NSIS был создан для распространения Winamp. Он базируется на предыдущем продукте Nullsoft — PiMP (plugin Mini Packager), иначе известным как SuperPiMP. После версии 2.0a0, проект был перемещён на SourceForge.net, где к работе над ним присоединились и сторонние разработчики. NSIS 2.0 был выпущен в свет 2 года спустя.

NSIS версии 1 был очень похож на классический Windows Installer, но он был более управлемым с помощью скриптов и поддерживал другие форматы сжатия. NSIS версии 2 поддерживает новый графический интерфейс пользователя, LZMA-сжатие, многоязычность и имеет хорошую систему плагинов.

Версия 2.01 была первой версией, поддерживающей компиляцию на любой из POSIX-платформ. Это позволило создавать Windows-инсталляторы на GNU/Linux и FreeBSD без использования эмулятора Wine. На данный момент поддерживается компиляция только для Windows.

▫ Описание

Компилятор NSIS — программа makensis — компилирует скрипты в исполняемый код. Каждая строчка скрипта содержит одну команду. Пример:
Код: Выделить весь код
 # Пример скрипта
 Name "Example1"
 OutFile "example1.exe"
 InstallDir "$PROGRAMFILES\Example1"
 Page Directory
 Page InstFiles
 Section
   SetOutPath $INSTDIR
   File ..\makensis.exe
 SectionEnd

Modern User Interface

В версии 2.0 был введён новый графический интерфейс пользователя, названный Modern UI (MUI). MUI очень похож на интерфейс мастеров, он поддерживает splash screen, выбора языка, выбор компонентов для установки и более широкие возможности настройки по сравнению со своим предшественником. Пример:
Код: Выделить весь код
 # Пример скрипта с Modern UI
 !include MUI.nsh
 Name "Example 2"
 OutFile Example2.exe
 !insertmacro MUI_PAGE_WELCOME
 !insertmacro MUI_PAGE_LICENSE "license.rtf"
 !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH
 !insertmacro MUI_LANGUAGE "English"
 !insertmacro MUI_LANGUAGE "German"
 !insertmacro MUI_LANGUAGE "French"
 Section "Extract makensis"
  SetOutPath $INSTDIR
  File ..\makensis.exe
 SectionEnd
NSIS может быть расширен при помощи плагинов, которые могут быть написаны на C++, Си, и Delphi. Плагины могут быть использованы для улучшения функциональности и интерфейса инсталлятора. Плагины могут быть вызваны в любой части кода NSIS скрипта.

С пакетом NSIS поставляются несколько плагинов, позволяющих добавлять новые страницы, заменять фоновые изображения, скачивать файлы из Интернета, выполнять математические вычисления, обновлять файлы и многое другое.

▫ Программы, использующие NSIS


◦ Антивирус Касперского
◦ Qip
◦ 3DNA Desktop
◦ 7-Zip
◦ ATI Display Driver
◦ CDex
◦ Dev-C++
◦ DivX
◦ eMule FileZilla
◦ Google Picasa
◦ Google Talk
◦ Intel C (компилятор)
◦ IrfanView
◦ LightAllow
◦ LyX
◦ Miranda IM Mozilla Firefox 2.0
◦ NASA World Wind
◦ Notepad++
◦ OpenOffice.org для Windows
◦ Pidgin
◦ VLC Player
◦ Winamp

▫ Чем я могу распаковать инсталлятор, созданный в NSIS?

В настоящее время инсталляторы NSIS не могут быть полностью декомпилированы. Сам инсталлятор не содержит в себе никаких функций для того, чтобы извлечь сценарий и/или файлы без инсталляции. Это - выбор разработчика, доступны ли исходный текст и/или файлы для инсталлятора для публики или нет. Есть, однако, внешние инструментальные средства, которые позволяют это сделать. 7-zip поддерживает частичную распаковку NSIS инсталляторов с алгоритмом сжатия lzma или bzip. Так же существует мульти-архивный плагин для TotalCommander.
Небольшая заметка для разработчиков: используйте DCryptDll, если хотите скрыть некоторые файлы в вашей инсталляции.


-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:02, 09-12-2012

 

Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


Привет народ,

alexfinik,
Цитата:
MaGoth, да, пример был бы очень неплох. У меня многомодульный инсталлятор, поэтому наверное, лучше пример от тебя - и тебе легче, чтобы не копаться с моим кодом, и мне, наверное. »
Отсутствовал некоторое время, потому не помню и не в курсе, проблема решена уже и нужен ли еще файл?

Цитата:
Друзья, может всё-таки кто-то знает почему данный код может не работать? »
Скорее проблема у тебя на стороне, у меня скрипт прекрасно скомпилился и все отображается как надо (NSIS-2.46.5 UNICODE).


AlekseyPopovv,
Цитата:
Как привязать реестр к выбору языка? »
У себя скриптах на юникоде, я делаю примерно так:
читать дальше »
Код: Выделить весь код
...
InstallDir "$PROGRAMFILES\"
!define PROG_UNINST_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PROG_NAME_TEXT}"
!define PROG_UNINST_ROOT_KEY "HKLM"
!define PROG_RKEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PROG_NAME_TEXT}"
InstallDirRegKey HKLM "${PROG_RKEY}" "InstallLocation"
AllowRootDirInstall true
...
Далее, после кастомных функций или команды RequestExecutionLevel admin, прописываем:
Код: Выделить весь код
!define MUI_LANGDLL_REGISTRY_ROOT "${PROG_UNINST_ROOT_KEY}" "HKCU"
!define MUI_LANGDLL_REGISTRY_KEY "${PROG_UNINST_KEY}" "Software\Modern UI Test"
!define MUI_LANGDLL_REGISTRY_VALUENAME "${PROG_NAME_FILE}: Language"
После строки кода !insertmacro MUI_PAGE_WELCOME прописываем:
Код: Выделить весь код
LicenseData $(mylicense)
!insertmacro MUI_PAGE_LICENSE $(mylicense)
Если лицензия будет нужна.
После строки кода !insertmacro MUI_UNPAGE_FINISH прописываем используемые языки, например:
Код: Выделить весь код
!insertmacro MUI_LANGUAGE "ENGLISH"
!insertmacro MUI_LANGUAGE "ROMANIAN"
!insertmacro MUI_LANGUAGE "GERMAN"
!insertmacro MUI_LANGUAGE "RUSSIAN"
!insertmacro MUI_LANGUAGE "ITALIAN"
!insertmacro MUI_LANGUAGE "CZECH"
!insertmacro MUI_LANGUAGE "POLISH"
!insertmacro MUI_LANGUAGE "SPANISH"
Здесь же, указываем расположение файлов на разных языках и в разных папках, если требуется:
Код: Выделить весь код
LicenseLangString mylicense ${LANG_ENGLISH} ".\licens\en\licence.rtf"
LicenseLangString mylicense ${LANG_ROMANIAN} ".\licens\ro\licence.rtf"
LicenseLangString mylicense ${LANG_GERMAN} ".\licens\de\licence.rtf"
LicenseLangString mylicense ${LANG_RUSSIAN} ".\licens\ru\licence.rtf"
LicenseLangString mylicense ${LANG_ITALIAN} ".\licens\it\licence.rtf"
LicenseLangString mylicense ${LANG_CZECH} ".\licens\cz\licence.rtf"
LicenseLangString mylicense ${LANG_POLISH} ".\licens\pl\licence.rtf"
LicenseLangString mylicense ${LANG_SPANISH} ".\licens\es\licence.rtf"
Либо все файлы в одной папке:
Код: Выделить весь код
LicenseLangString mylicense ${LANG_ENGLISH} ".\licens\licence_en.rtf"
При этом, изменяем название файлов соответственно: licence_en.rtf, licence_ro.rtf и т.д.
И прописываем эту строку для каждого языка отдельно, все аналогично как и в примере выше.

И следом, прописываем:
!insertmacro MUI_RESERVEFILE_LANGDLL
Затем, по всему вашему коду, все тексты созданные вами и отображаемые программой для юзера, нужно оформить примерно по такой схеме:
Код: Выделить весь код
LangString TextWelcomePage ${LANG_ENGLISH} "The Setup Wizard will guide you through the installation process of $(^Name).\r\n\r\nIt is strongly recommended to close all other applications before continuing the installation procedure.\r\n\r\n$_CLICK"
LangString TextWelcomePage ${LANG_ROMANIAN} "Vei fi ghidat in procesul de instalare al $(^Name).\r\n\r\nEste recomandat sa inchideti celelalte aplicatii pornite inainte sa continuati instalarea.\r\n\r\n$_CLICK"
LangString TextWelcomePage ${LANG_GERMAN} "Dieser Assistent führt Sie durch die Installation von $(^Name).\r\n\r\nEs wird empfohlen, vor der Installation alle anderen Programme zu schließen.\r\n\r\n$_CLICK"
LangString TextWelcomePage ${LANG_RUSSIAN} "Этот мастер проведёт Вас через процесс инсталляции $(^Name).\r\n\r\nРекомендуется закрыть перед инсталляцией все другие программы.\r\n\r\n$_CLICK"
LangString TextWelcomePage ${LANG_ITALIAN} "Il Setup Wizard ti guiderà attraverso il processo d'installazione di $(^Name).\r\n\r\nÈ fortemente raccomandato di chiudere tutte le altre applicazioni attive prima di proseguire con l'installazione.\r\n\r\n$_CLICK"
LangString TextWelcomePage ${LANG_CZECH} "Setup Wizard vás provede procesem instalace $(^Name).\r\n\r\nJe silně doporučeno zavřít všechny ostatní aplikace, než budete pokračovat v instalaci.\r\n\r\n$_CLICK"
LangString TextWelcomePage ${LANG_POLISH} "Kreator instalacji poprowadzi cię przez proces instalacji $(^Name).\r\n\r\nZdecydowanie zaleca się zamknięcie wszystkich innych aplikacji przed kontynuacją instalacji.\r\n\r\n$_CLICK"
LangString TextWelcomePage ${LANG_SPANISH} "El asistente de instalación le guiará a través del proceso de instalación de $(^Name).\r\n\r\nIt es muy recomendable cerrar todas las aplicaciones antes de continuar con el procedimiento de instalación.\r\n\r\n$_CLICK"
В конце кода, прописываем:
Код: Выделить весь код
в функцию .onInit 
  !insertmacro MUI_LANGDLL_DISPLAY

в функцию un.onInit
  !insertmacro MUI_UNGETLANGUAGE
При запуске инсталлера будет окошко с выбором языка, при деинсталле язык автоматом будет определяться, а все тексты в инсталлере при инсталляции/деинсталляции будут на указанном юзером языке.. Все.



Мои вопросы:
- обойден ли лимит в 2ГБ?
- исправлен ли косяк с иконкой и свойствами файла, при размере инсталлера больше ~350 МБ?


Спасибо.. ,)

Отправлено: 22:49, 04-08-2014 | #1251



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


K.A.V.

Попробовал твой пример "Проигрывание WAV-файлов" у себя, ничего не вышло..

Загнал его в .onInit
Код: Выделить весь код
...
!define SND_ASYNC 1
!define SND_FILENAME 0x20000
!define SND_LOOP 8
!define SND_NAME "InstallTheme.wav"

  ReserveFile "${NSISDIR}\Plugins\system.dll"
  SetOutPath "$TEMP\${MOD_NAME_BASE} Installation2\bgi_ground"
  ReserveFile "${SND_NAME}"
  File "${SND_NAME}"  

System::Call 'Winmm::PlaySound(t"$TEMP\${MOD_NAME_BASE} Installation2\bgi_ground\${SND_NAME}", i0, i${SND_FILENAME}|${SND_ASYNC}|${SND_LOOP})'
...
Под юникодом и из другой директории, оно работает вообще ?!

Отправлено: 02:10, 05-08-2014 | #1252


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата MaGoth:
Попробовал твой пример "Проигрывание WAV-файлов" у себя, ничего не вышло.. »
Win2000
WinXP 32-bit
Win7 32/64-bit
Win8 32-bit

На всех системах у меня работает данный метод, проигрывает файлы из любой директории
Насчет юникода ничего не скажу
Может, в пути у вас ошибка или формат WAV файла не тот?

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Отправлено: 17:55, 05-08-2014 | #1253


Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


K.A.V.

Цитата:
На всех системах у меня работает данный метод, проигрывает файлы из любой директории
Насчет юникода ничего не скажу
Очень плохо

Цитата:
Может, в пути у вас ошибка или формат WAV файла не тот?
Путь 100% рабочий, другое дело годится ли все это для данной функции в Юнике ?!

Как пример, для Юникода и файлов *.mp3 и их воспроизведения, я использую такой код:

Код: Выделить весь код
Function .onInit
  Push $R0
  SetCurInstType 0
  !insertmacro MUI_LANGDLL_DISPLAY
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "setup.ini"
  StrCpy $1 ${SecMod}
;--------------------------------
  !define APP_NAME "mci.sound"
  !define SND_NAME "InstallTheme.mp3"
;--------------------------------
  ReserveFile "${NSISDIR}\Plugins\system.dll"
  SetOutPath "$TEMP\${MOD_NAME_BASE} Installation2\bgi_ground"
  ReserveFile "${SND_NAME}"
  File "${SND_NAME}"  
  System::Call 'msvfw32.dll::MCIWndCreateW(i 0, i 0,i 0x0070, t "$TEMP\${MOD_NAME_BASE} Installation2\bgi_ground\${SND_NAME}") i .r0'
  StrCpy $hmci $0
  SendMessage $hmci 0x0490 0 0 $0
  IntCmp $0 0 Keine_Musik
  ShowWindow $hmci SW_HIDE
  SendMessage $hmci 0x806 0 "STR:play repeat"  
  Keine_Musik:
...
FunctionEnd
И все работает, единственная проблема зацикливание под Юникодом не срабатывает, до сих пор не нашел способа как побороть...

А что с форматом, и каким он должен быть?
В справке ничего не указано на этот счет, я использую "DVI IMA ADPCM", а нужен "RAW PCM", или еще какой ?!

Последний раз редактировалось MaGoth, 05-08-2014 в 21:58.


Отправлено: 21:53, 05-08-2014 | #1254


Аватара для habib2302

Ветеран


Сообщения: 861
Благодарности: 102

Профиль | Отправить PM | Цитировать


Доброе время суток. Можно ли как нибудь узнать какие команды который прописаны в инсталляторе. например регистрация DLL?

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 13:51, 06-08-2014 | #1255

MKN MKN вне форума

Ветеран


Сообщения: 2358
Благодарности: 559

Профиль | Отправить PM | Цитировать


Цитата habib2302:
Можно ли как нибудь узнать какие команды который прописаны в инсталляторе. например регистрация DLL? »
Имеется ввиду код скрипта ? - Нет. Предпринимаются правда попытки... Например, http://nsis.sourceforge.net/NullsoftDecompiler

Отправлено: 17:56, 06-08-2014 | #1256


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: rar wav_test.rar
(72.2 Kb, 13 просмотров)

Цитата MaGoth:
Под юникодом »
Вызывайте PlaySoundW,а не PlaySound

Насчет формата файла точно не скажу, уже не помню, тестировал я или нет, но данной командой пользуюсь в SFX Creator для проигрывания звуков
Пример моего WAV файла во вложении, попробуйте его проверить.
Система без проблем у вас? Драйвера все установлены? Потому как я указал, тестировал на виртуалке во многих системах и нигде проблем не возникло

Цитата habib2302:
Доброе время суток. Можно ли как нибудь узнать какие команды который прописаны в инсталляторе. например регистрация DLL? »
Шапку читаем

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Отправлено: 17:57, 06-08-2014 | #1257


Аватара для habib2302

Ветеран


Сообщения: 861
Благодарности: 102

Профиль | Отправить PM | Цитировать


Цитата K.A.V.:
Шапку читаем »
конкретней

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 19:41, 06-08-2014 | #1258


Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


habib2302,

▫ Чем я могу распаковать инсталлятор, созданный в NSIS?
читать дальше »
В настоящее время инсталляторы NSIS не могут быть полностью декомпилированы. Сам инсталлятор не содержит в себе никаких функций для того, чтобы извлечь сценарий и/или файлы без инсталляции. Это - выбор разработчика, доступны ли исходный текст и/или файлы для инсталлятора для публики или нет. Есть, однако, внешние инструментальные средства, которые позволяют это сделать. 7-zip поддерживает частичную распаковку NSIS инсталляторов с алгоритмом сжатия lzma или bzip. Так же существует мульти-архивный плагин для TotalCommander.
Небольшая заметка для разработчиков: используйте DCryptDll, если хотите скрыть некоторые файлы в вашей инсталляции.



K.A.V.,

Цитата:
Система без проблем у вас? Драйвера все установлены? Потому как я указал, тестировал на виртуалке во многих системах и нигде проблем не возникло.
Естественно, не чайник же...

Цитата:
Насчет формата файла точно не скажу, уже не помню, тестировал я или нет, но данной командой пользуюсь в SFX Creator для проигрывания звуков
Пример моего WAV файла во вложении, попробуйте его проверить.
Архив со звуком сравнил, у меня аналогичный формат саунда что и у вас, - "DVI IMA ADPCM", но скорее всего проиграется любой вав..

Цитата:
Вызывайте PlaySoundW,а не PlaySound
С ним и вызывал под юником, - но не работало, пока не поменял кавычки местами, одинарные внутрь.
И.. музыка играет.., но не долго..!

Пока исполнение когда не дойдет до закрытия сплеша:
Код: Выделить весь код
        newadvsplash::show 3500 1500 1500 ffffff "$TEMP\${MOD_NAME_BASE} Installation2\bgi_ground\Splash.bmp"
После выполнения этого коды вместе с ним вырубается и музыка ?!
Соответственно вопрос, есть ли какой другой метод/способ кроме спуска функции воспроизведения звука, ниже кода этого сплеша? Или может какой аналогичный сплеш по-новее есть, но без подобных глюков ?

Спасибо.. ,)

Последний раз редактировалось MaGoth, 06-08-2014 в 22:31.


Отправлено: 22:21, 06-08-2014 | #1259


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата MaGoth:
Соответственно вопрос, есть ли какой другой метод/способ кроме спуска функции воспроизведения звука, ниже кода этого сплеша? Или может какой аналогичный сплеш по-новее есть, но без подобных глюков ? »
Как вариант можно заюзать внешнее консольное приложение для проигрывания аудио, например sounder.exe (30 Кб), сам не тестил, т.к. лень и хочется спать
В своё время для сборки контры я использовал mpg123.exe для проигрывания mp3 файла сразу после запуска установщика, но там вес файла был ~350 Кб

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Отправлено: 21:12, 07-08-2014 | #1260



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 dimadr Наборы обновлений для Windows XP/2003/Windows 7 267 14-02-2020 08:25
[архив].: NSIS - все вопросы :. kotkovets Автоматическая установка приложений 3387 09-12-2012 11:56
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 jameszero Наборы обновлений для Windows XP/2003/Windows 7 1491 22-07-2011 22:42
Выбор|модернизация процессора .:[все вопросы]:. Часть I Myxa Выбор отдельных компонентов компьютера и конфигурации в целом 1845 01-01-2011 19:18
Вопросы по создателю инсталляций NSIS MaxDELETE Программное обеспечение Windows 14 04-07-2007 10:01




 
Переход