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

Компьютерный форум 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

 

Аватара для ZaxBoys66

Новый участник


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

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


I have a question.

It is possible that NSIS can download files using the program Aria2c.exe?

Documentation

https://aria2.github.io/manual/ru/ht...ml#cmdoption-d

Отправлено: 21:52, 02-01-2016 | #1931



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

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


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


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

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


Цитата K.A.V.:
Ну так справочку то когда читать начнём?
GetSize + StrCmp для сравнения с другим размером »
Благодарствую!
Я видел этот пример в справке, но не сразу разобрался как его для себя адаптировать.

Получился такой пример кода секции:

Код: Выделить весь код
Section
 ${GetSize} "E:\Program Files\NSIS-3.0b2\Examples" "/M=2.nsi /S=466B /G=0" $0 $1 $2
Pop $0
StrCmp $0 "466" +3
MessageBox MB_OK "Ошибка"
Quit
SectionEnd
вроде работает).

Отправлено: 22:04, 02-01-2016 | #1932


Аватара для Dodakaedr

Ветеран


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

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


K.A.V.,
Цитата:
Если вы про "обновить значки" в системе
Да про это. Спасибо!

-------
Inno Setup 5 Ultra Unicode


Отправлено: 23:40, 02-01-2016 | #1933


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


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

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


Цитата K.A.V.:
MaGoth, я с юникодом вообще не работал (и пока не собираюсь), так что по вопросам данных сборок я ничего подсказать не могу »
Членово...


Впрочем у меня сейчас другая проблема нарисовалась, решил изменить ини файл и поймал болт на выходе..
Пример кода:
Код: Выделить весь код
  ReadINIStr $0 "$INSTDIR\System\Gothic.ini" "[ENGINE]" "zTexCacheOutTimeMSec"
  MessageBox MB_OK $0
- выводится только пустой массагин-бокс;


или при использовании Энума:
Код: Выделить весь код
  EnumINI::Section "$INSTDIR\System\Gothic.ini" "[ENGINE]"
  Pop $R2
; $R2 - количество параметров
  StrCmp $R2 "error" done3
  loop3:
    IntCmp $R2 "0" done3 done3 0
    Pop $R3
    ReadINIStr $R4 "$INSTDIR\System\Gothic.ini" "[ENGINE]" "$R3"

  MessageBox MB_OK|MB_ICONINFORMATION "Параметр: $R3 $\n Значение: $R4"

    IntOp $R2 $R2 - 1
  Goto loop3
  done3:
- вообще ничего не выводится (здесь скорее всего либу надо под Юник пилить ?!).

Кусок кода из ини файла для тестов:
Код: Выделить весь код
...
[ENGINE]

zDetailTexturesEnabled=1
; ... here you can define if the engine should support detail textures (default: 1)

zSubdivSurfacesEnabled=0
; ... with this setting you can activate subdiving surface for progressive meshes (untestet, default: 0)

zTexCacheOutTimeMSec=240000
zTexCacheSizeMaxBytes=32000000
zSndCacheOutTimeMSec=10000
zSndCacheSizeMaxBytes=20000000
; ... with these settings you can tune the memory usage of the texture and sound resources.
; if you have more ram than 512 MB, greater values will improve performance
...
Кто-нить сталкивался с подобным и как побороть ?! (Нсиська на юниках... 2.46.5)

Цитата Stealthmax:
Как можно принудительно задать язык интерфейса, не используя »
Зачем оно вам нужно?

Цитата Stealthmax:
Использую LoadLanguageFile и LangString для отображения сообщений на разных языках, но при этом сами кнопки MessageBox берут язык системной локали. Как обойти это? »
А глянуть можно что у вас за кнопки такие особенные?!

Ибо у меня все стандарное используется и все на мультилангах работает, пример:
Код: Выделить весь код
...
  wrong:
  MessageBox MB_YESNO|MB_ICONQUESTION "$(TextInstallationListInv)" IDYES done
    Pop $R0
    Abort
...
  StrCmp $VerifyMessageOnce "done" +3
  MessageBox MB_OK|MB_ICONINFORMATION "$(TextVerifyInstDir)"
  StrCpy $VerifyMessageOnce "done"
  Abort
  done:
...


LangString TextInstallationListInv ${LANG_ENGLISH} "Installation list is invalid.$\r$\nAre you sure you want to continue deinstallation?"
LangString TextInstallationListInv ${LANG_ROMANIAN} "Directorul în care doriți să instalați nu este valid.$\r$\nSunteți sigur că doriți să continuați dezinstalarea?"
LangString TextInstallationListInv ${LANG_GERMAN} "Die Installation Liste ist ungultig.$\r$\nFortsetzen zu deinstallieren?"
LangString TextInstallationListInv ${LANG_RUSSIAN} "Инсталляционный перечень недействителен.$\r$\nВсё равно продолжить деинсталляцию?"
LangString TextInstallationListInv ${LANG_ITALIAN} "Il percorso d'installazione sembra non essere corretto.$\r$\nSei sicuro di voler continuare la disinstallazione?"
LangString TextInstallationListInv ${LANG_CZECH} "Zvolený adresář se zdá být nesprávný.$\r$\nOpravdu chcete pokračovat v odinstalaci?"
LangString TextInstallationListInv ${LANG_POLISH} "Folder instalacji wydaje się być nieprawidłowy.$\r$\nCzy jesteś pewien że chcesz kontynuować odinstalowywanie?"
LangString TextInstallationListInv ${LANG_SPANISH} "El directorio de la instalación parece ser inválido.$\r$\n¿Está seguro que quiere continuar con la desinstalación?"
;--------------------------------
LangString TextVerifyInstDir ${LANG_ENGLISH} "Choose the directory containing installed 'Gothic II - Night of the Raven'."
LangString TextVerifyInstDir ${LANG_ROMANIAN} "Alegeți directorul unde se află instalat 'Gothic II - Noaptea Corbului'"
LangString TextVerifyInstDir ${LANG_GERMAN} "Wählen Sie das Verzeichnis aus, in welchem sich 'Gothic II - Die Nacht des Raben' befindet."
LangString TextVerifyInstDir ${LANG_RUSSIAN} "Выберите каталог, в который установлена игра 'Готика 2 - Ночь Ворона'."
LangString TextVerifyInstDir ${LANG_ITALIAN} "Scegli la cartella in cui è installato 'Gothic II - La Notte del Corvo'."
LangString TextVerifyInstDir ${LANG_CZECH} "Vyberte adresář, v němž je nainstalován 'Gothic II - Noc Havrana'."
LangString TextVerifyInstDir ${LANG_POLISH} "Wybierz folder zawierający zainstalowane 'Gothic II - Noc Kruka'."
LangString TextVerifyInstDir ${LANG_SPANISH} "Elija el directorio que tiene instalado 'Gothic II - La Noche del Cuervo'."

Отправлено: 07:02, 03-01-2016 | #1934


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

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


Contributor


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

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


Цитата MaGoth:
Впрочем у меня сейчас другая проблема нарисовалась, решил изменить ини файл и поймал болт на выходе.. »
В команде ReadINIStr при указании секции из которой мы читаем, символы квадратных скобок не нужны

У вас:
Код: Выделить весь код
ReadINIStr $0 "$INSTDIR\System\Gothic.ini" "[ENGINE]" "zTexCacheOutTimeMSec"
А должно быть:
Код: Выделить весь код
ReadINIStr $0 "$INSTDIR\System\Gothic.ini" "ENGINE" "zTexCacheOutTimeMSec"
У вас:
Код: Выделить весь код
EnumINI::Section "$INSTDIR\System\Gothic.ini" "[ENGINE]"
А должно быть:
Код: Выделить весь код
EnumINI::Section "$INSTDIR\System\Gothic.ini" "ENGINE"

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

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

Отправлено: 09:03, 03-01-2016 | #1935

MKN MKN вне форума

Ветеран


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

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


Цитата Stealthmax:
Нарыл тут некий "MessageBox Plug-in", но следы его теряются »
Я ведь уже дал пример своего MB с помощью DlgHost Plugin.

Отправлено: 10:56, 03-01-2016 | #1936


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


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

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


Цитата K.A.V.:
В команде ReadINIStr при указании секции из которой мы читаем, символы квадратных скобок не нужны »
Интересно, и чего об этом нигде не отражено?
Сейчас проверим в работе..

Отправлено: 12:10, 03-01-2016 | #1937


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


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

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


Цитата Stealthmax:
В таком случае кнопка отмены принимает значение системной локали, игнорируя язык установщика. »
Т.е. Кнопки "ОК", "Кансел" и прочее подобное ?! Я правильно понял, это у вас не переводится ?
Здесь скорее всего проблема не в этом, а в том что сам инсталлер подстраивается под язык винды(об этом забывать не стоит).
Например, если вы запустите свой инсталлер в немецкой/английской Винде, то должны увидеть, что эти мессаги сменятся на язык установленный по уполчанию в системе, их не требуется переводить.
За исключением случаев, в которых вы наклепали своих именований для кноп, но с этим я не парился, поэтому ничего не скажу...

Отправлено: 19:16, 03-01-2016 | #1938


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


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

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


Цитата Stealthmax:
Ну об этом я и веду речь - очевидный недостаток NSIS. Получается, что часть компонентов заимствована согласно API ОСи, что ни есть правильно, недостаток кода. »
Да, такая привязка очень членовая вещь.. Но опять-же, не в ней может быть дело, приведу как пример случай из своей практики.
Адаптировал одну прогу на 8 лангов, все в ЮТФ 16-ЛЕ, по умолчанию знаю, что все тексты хоть врознь, хоть в кучу будут корректно отображаться на экране. Запускаю польску прогу и вижу кучу ?????
Оказалась проблема в том, что винда по своему некоторые функции мультиланга обрабатывает, не зависимо от того что я хотел бы видеть, но при этом, все тексты корректно отобразились у поляка на компе..
Короче, тут надо реально тестить и смотреть как оно отображается на компе у носителей языка, ну, ли брать в руки бубен и переписывать все это хозяйство под себя.
Но я лично с этим заморачиваться не стал, забил бол на это дело. Что и тебе советую...
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:16, 03-01-2016 | #1939


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

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


Contributor


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

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


Цитата Stealthmax:
Ну об этом я и веду речь - очевидный недостаток NSIS. Получается, что часть компонентов заимствована согласно API ОСи, что ни есть правильно, недостаток кода. »
лол
Загляните в исходники NSIS и разочаруйтесь в нём раз и навсегда, все (ну или почти все) команды, доступные в NSIS - это API функции (конечно же, если речь ведём про Windows), по вашему мнению получается, что весь NSIS это один сплошной недостаток, т.к. NSIS юзает для функционала команды из библиотек системы.
Я, например, не считаю это каким-то недостатком, что NSIS работает с API, т.к. в этом его уникальность и гибкость, к NSIS можно без труда наклепать плагин для расширения функционала и он будет работать, чего нет "из коробки" - разраб может допилить функционалом через плагин или даже с помощью system-плагина, если нужно не что-то сильно навороченное
Как ни странно, но на NSIS можно писать не только инсталлеры, но и приложения, правда это всё выглядит не очень удобно и функционально, если проект серьёзный

Что касается стандартных текстов на кнопках сообщений - юзается api функция MessageBox и да, никакие строки в NSIS-коде не заставят эту функцию показывать текст в зависимости от языка инсталлера, т.к. текст зависит от языка системы пользователя
Почему не стали писать свой функционал кнопок? А зачем? Какой смысл усложнять код и извращаться с кастомными кнопками в NSIS? В таком виде пользователю хотя бы всегда будет понятно, на какую кнопку он жмёт - Да или Отмена, а не что-то начирканное кастомное писателем инсталлятора, который не дай бог написал свой первый инсталлер и залил его в сеть

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


Отправлено: 09:24, 06-01-2016 | #1940



Компьютерный форум 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




 
Переход