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

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

 

Аватара для Limonica

Старожил


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

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


Исходные данные:
TXT файл с одной изменяющейся числовой строкой.

Задача:
Проверить есть ли числовая строка в этом тестовом файле, если нет, то крутится в цикле ожидая появления.

Решение:
Читаем строку, заносим в переменную, ну а дальше как сравнить появилось число или нет?

Цитата:
!include "Logiclib.nsh"

OutFile "line.exe"
SilentInstall silent
RequestExecutionLevel user
Section
${LineRead} "id.log" "1" $1

${If} $1 == "ID=(пусто)"
MessageBox MB_OK "$1 error"
${ElseIf} $1 == "ID=(какое то число)"
MessageBox MB_OK "$1 susses"
${EndIf}
SectionEnd
Такой код само собой не работает, знатоки прошу помощи!

Содержимое id.log:

Цитата:
ID=

или

ID=какое то число

Последний раз редактировалось Limonica, 17-04-2014 в 09:55.


Отправлено: 09:45, 17-04-2014 | #1141



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

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


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


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

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


Цитата Limonica:
...с лету не нашел »
Тогда хватит летать! Идите на посадку и не спеша начинайте читать:
Цитата K.A.V.:
Перевод справки NSIS => LineRead: читаем содержимое строки по номеру »
Там же:
Справочник NSIS -> Примеры кодов -> Работа со строками;
Справочник NSIS -> Примеры кодов -> Замена строки в текстовом файле;
Попробуйте подогнать под свои цели. А не получится - неработающий код сюда.
По крайней мере, так будет более понятно, что вы хотели сделать.

Последний раз редактировалось Kopejkin, 17-04-2014 в 10:15.


Отправлено: 10:08, 17-04-2014 | #1142


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

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


Contributor


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

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


Цитата Limonica:
Такой код само собой не работает, знатоки прошу помощи! »
Ну, само собой...В переменную заносится значение всей строки целиком, это же не параметр в секции INI файла, чтобы сразу прочиталось то, что идёт после знака "="
Следовательно, вам нужно самому фильтровать строку и вытаскивать значение из строки.

Опять же, пока вы не научитесь пользоваться стандартными командами NSIS и включать логическое мышление - вы будете постоянно стопориться на таких простых задачах.

Имеем: строку вида "ID=какое то число"
Вопрос: как получить значение, которое идёт после символа "="
Ответ: вспоминаем стандартную и простую команду StrCpy (описание есть в справочнике)
В нашем случае мы используем её для отсеивания первых трёх символов строки, чтобы получить значение "типа параметра ID"
Код: Выделить весь код
 ${LineRead} "id.log" "1" $1
 StrCpy $1 "$1" "" 3
Пример функции, которая ждёт появления в значении вашей строки числа 687
Код: Выделить весь код
Function LineReadFunc
start:
Sleep 1000
 ${LineRead} "id.log" "1" $1
 StrCpy $1 "$1" "" 3
 StrCmp $1 "" start 0
 StrCmp $1 "687" 0 start
 MessageBox MB_OK|MB_ICONINFORMATION "Число 687 появилось, конец функции"
FunctionEnd

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

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

Отправлено: 10:12, 17-04-2014 | #1143


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


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

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


Не в тему, но давно хотел спросить о работе текстового редактора форума.

Почему при редактировании сообщения слетает форматирование?

читать дальше »

Отправляю такое:



Если хочу отредактировать, то в расширенном редакторе вижу уже такое



Отправлено: 10:26, 17-04-2014 | #1144


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

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


Contributor


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

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


Цитата Kopejkin:
Не в тему »
Вам в раздел О сайте и форуме

Цитата Kopejkin:
Почему при редактировании сообщения слетает форматирование? »
У меня проблем нет. Opera 12.16

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


Отправлено: 10:33, 17-04-2014 | #1145


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


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

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


Здравствуйте.
Начал разбираться с NSIS и тут же уперся.
Банальная, думаю, задача.
Надо прочитать номер версии файла, поместить результат в name и в инсталлятор.

Делаю так:
Код: Выделить весь код
!define PRODUCT_NAME "MyProg"
!define PRODUCT_PUBLISHER "MyCorp"
!define EXE_FULL_NAME "D:\4inst\prog.exe"
var PROD_VERSION

Name "${PRODUCT_NAME} v$PROD_VERSION"

...

VIProductVersion "1.0.0.0"
VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
VIAddVersionKey "LegalCopyright" "${PRODUCT_PUBLISHER}"
VIAddVersionKey "CompanyName" "${PRODUCT_PUBLISHER}"
VIAddVersionKey "FileDescription" "${PRODUCT_NAME} ${PROD_VERSION}"
VIAddVersionKey "FileVersion" "1.0.0.0"

...

Function .onInit
  !insertmacro MUI_LANGDLL_DISPLAY
  !include "FileFunc.nsh"
  ${GetFileVersion} "${EXE_FULL_NAME}" $R0
  StrCpy $PROD_VERSION $R0
FunctionEnd
Получаю очень неожиданный (для меня) результат: При установке все так как должно быть: "Вас приветствует мастер установки MyProg v1.0.0.0"... Однако, когда запускаешь деисталлятор, номер версии теряется: "Вы уверены в том, что желаете удалить MyProg v и все компоненты..."

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

Отправлено: 08:17, 18-04-2014 | #1146


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

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


Contributor


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

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


Цитата kotompazb:
Надо прочитать номер версии файла, поместить результат в name и в инсталлятор. »
Внешнего файла, не зависимого от пакета установки? И версию этого файла используете в инсталляторе/деинсталляторе как версию вашего устанавливаемого/удаляемого приложения?
Если да, то...зачем? Можно 1 раз указать версию файла в скрипте и потом использовать везде переменные
Код: Выделить весь код
!define PRODUCT_VERSION "2.3.4.5"

VIProductVersion "${PRODUCT_VERSION}"
VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
VIAddVersionKey "LegalCopyright" "${PRODUCT_PUBLISHER}"
VIAddVersionKey "CompanyName" "${PRODUCT_PUBLISHER}"
VIAddVersionKey "FileDescription" "${PRODUCT_NAME} ${PRODUCT_VERSION}"
VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}"
Цитата kotompazb:
Однако, когда запускаешь деисталлятор, номер версии теряется »
Всё правильно, функция .onInit используется только при инициализации программы установки, чтобы прописать команды в функцию инициализации программы удаления, используйте функцию un.onInit, т.е. в вашем случае вам нужно продублировать функцию .onInit и присвоить второй функции имя un.onInit

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

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

Отправлено: 08:44, 18-04-2014 | #1147


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


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

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


Цитата K.A.V.:
Внешнего файла, не зависимого от пакета установки? И версию этого файла используете в инсталляторе/деинсталляторе как версию вашего устанавливаемого/удаляемого приложения?
Если да, то...зачем? Можно 1 раз указать версию файла в скрипте и потом использовать везде переменные »
Не независимого, а устанавливаемого, то есть версия устанавливаемого пишется в версию инсталлера, чтобы вручную ее не переписывать каждый раз - получится неизменный скрипт.
Цитата K.A.V.:
Всё правильно, функция .onInit используется только при инициализации программы установки, чтобы прописать команды в функцию инициализации программы удаления, используйте функцию un.onInit, т.е. в вашем случае вам нужно продублировать функцию .onInit и присвоить второй функции имя un.onInit »
Вот за это спасибо. Так и знал, что ошибка где-то на поверхности.

Отправлено: 09:10, 18-04-2014 | #1148


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

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


Contributor


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

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


Цитата kotompazb:
получится неизменный скрипт. »
Получится багованный код у вас, при условии, что перед получением версии файла, указанный вами файл не существует на диске.

Код, который вы прописали, будет срабатывать тогда, когда пользователь запустит ваш пакет инсталлятора, соответственно, исходя из вашего кода, ваш пакет инсталлятора при запуске будет читать версию файла по пути "D:\4inst\prog.exe", это есть изначальный баг вашего кода, т.к. данного файла у пользователя на компе просто напросто не будет. Если же вы распаковали указанный файл и потом проверяете его версию - другой разговор.
А судя по вашему текущему коду, у меня складывается такое впечатление, будто вы думаете, что в процессе создания EXE-файла пакета инсталлятора версия указанного файла "зашивается" в код вашего пакета инсталлятора и запоминается - это не так.

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

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

Отправлено: 10:40, 18-04-2014 | #1149


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


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

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


Цитата K.A.V.:
Код, который вы прописали, будет срабатывать тогда, когда пользователь запустит ваш пакет инсталлятора, соответственно, исходя из вашего кода, ваш пакет инсталлятора при запуске будет читать версию файла по пути "D:\4inst\prog.exe", это есть изначальный баг вашего кода, т.к. данного файла у пользователя на компе просто напросто не будет. »
Факт же. Вывод: ночью надо спать. А нет ли какого-то способа сохранить версию, в процессе создания инсталятора все-таки?

Отправлено: 11:10, 18-04-2014 | #1150



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




 
Переход