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

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

Закрытая тема
Настройки темы
[архив].: NSIS - все вопросы :.

Аватара для kotkovets

Ветеран


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


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

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


Изменения
Автор: volk1234
Дата: 09-12-2012
Описание: перевод темы в архив.
Тема закрыта!
Лимит страниц.
Продолжение тут:
.: NSIS - все вопросы :. часть 2.
Старая шапка:
читать дальше »

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

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


Текущая версия: 2.46 от 6 декабря 2009 года
Скачать | Архив сборок версии 2 | Архив сборок версии 1

ВНИМАНИЕ! Созданный в NSIS инсталлятор является ANSI-приложением. Есть возможность использовать UNICODE-сборку системы, но при этом ваши дистрибутивы не будут работать в ANSI-системах, таких, как Windows 9x. Для загрузки UNICODE-сборки системы посетите сайт: http://www.scratchpaper.com/

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

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

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

Плагины и полезности к NSIS: http://nsis.sourceforge.net/Category:Plugins

Интерфейс Venis GUI: http://www.spaceblue.com/products/venis
Интерфейс ExperienceUI GUI http://experienceui.xx0r.info/oldeng...erienceui/home
Пример:


Интерфейс SkinCrafter Plugin - http://www.skincrafter.com/
Пример:

Инструкция по использованию от K.A.V.

Примеры скриптов на нашем форуме
Скрипт 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, если хотите скрыть некоторые файлы в вашей инсталляции.


===========
тема прикрепляется, шапка будет дорабатыватся... Volk1234, hb860

Отправлено: 23:35, 17-06-2006

 

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


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

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


Добрый день.
Изучал справку NSIS, но к сожалению не нашёл ответа на интересующий меня вопрос. Если вас не затруднит, пожалуйста, подскажите как можно организовать реальный прогресс установки на странице инсталляции? Просто у меня на данный момент получается так, что инсталляция реально не завершена и на половину, а прогресс-бар заполняется уже на 90%.
Поискав плагины на эту тему, обнаружил что имеется NSIS Real Plugin (http://nsis.sourceforge.net/RealProgress_plug-in). Но моя криворукость не позволяет мне понять принцип работы данного плагина... Быть может в стандартных средствах NSIS есть более простой способ решения моей проблемы?
Спасибо!

Отправлено: 14:45, 25-02-2012 | #2331



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

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


Аватара для kotkovets

Ветеран


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

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


Цитата Sidril:
Изучал справку NSIS, но к сожалению не нашёл ответа на интересующий меня вопрос. Если вас не затруднит, пожалуйста, подскажите как можно организовать реальный прогресс установки на странице инсталляции? Просто у меня на данный момент получается так, что инсталляция реально не завершена и на половину, а прогресс-бар заполняется уже на 90% »
Проблема в Вашем скрипте, может макросе, идет прерывание установки - ИМХО на 100% !
Ищите команды - abort, return - наверняка по неправильным условия срабатывают, а может и правильным...

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


Отправлено: 16:13, 25-02-2012 | #2332


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


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

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


kotkovets
Да нет, установка не прерывается. Дело в том что прогресс установки ориентируется на выполнение команд скрипта, т.е к примеру в скрипте 500 команд, если выполнено уже 450 строк, то прогресс-бар заполнится на 90%. Меня это не устраивает, мой инсталлятор построен на принципах запуска и ожидания конца работы внешних приложений, это всё прописано ближе к концу скрипта, поэтому и показывает прогресс 90%... Но работа внешних приложений длится приличное кол-во времени, а прогресс бар как за 5 секунд дошёл до 90% и потом уже не двигается. Установка продолжается - прогресс бар стоит.

Нужно как-то настраивать прогресс-бар... В справочнике по NSIS тоже увы нет примеров для этого. Как-то странно, вроде нормальный прогресс установки - элементарная вещь, а такие вот проблемы (

Отправлено: 16:40, 25-02-2012 | #2333


Аватара для kotkovets

Ветеран


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

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


Цитата Sidril:
Установка продолжается - прогресс бар стоит »
Прогрecc бар двигается только по внутренним командам, сообщениям - но не запускам внешних приложений.
попробуйте между перед каждым запуском приложения прописать:
Код: Выделить весь код
DetailPrint "Установка название приложения"
А ну последней командой в последней секции
Код: Выделить весь код
DetailPrint "готово"
Можно конечно получить последними командами дескриптор прогресса, найти верхний предел и установить

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


Отправлено: 18:06, 25-02-2012 | #2334


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


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

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


На таких блоках поставлен запуск и ожидание внешних приложений:

SetDetailsPrint textonly
DetailPrint "Установка основных компонентов"
SetDetailsPrint listonly
SetOutPath "$INSTDIR"
ExecWait '"$INSTDIR\install_old.exe"'

SetDetailsPrint textonly
DetailPrint "Установка дополнительных компонентов"
SetDetailsPrint listonly
SetOutPath "$INSTDIR"
ExecWait '"$INSTDIR\install_new.exe"'

Задача передо мной стоит чтоб в тот момент когда идёт установка основных компонентов прогресс бар был на 30%, когда начинается установка дополнительных компонентов - на 40% и так далее... Но так понимаю в NSIS это архисложная задача (

Отправлено: 22:25, 25-02-2012 | #2335


Аватара для kotkovets

Ветеран


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

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


Пробуйте так, хотя думаю врядли, nsis тоже двигает прогресс
читать дальше »
Код: Выделить весь код
!macro SETPOS position
   FindWindow $R9 "#32770" "" $HWNDPARENT
   GetDlgItem $R9 $R9 1004
   Intop $R8 300 * ${position}
   SendMessage $R9 0x402 $R8 0
!macroend

Section
   !insertmacro SETPOS 0 ;устанавливаем на 0%.
   SetDetailsPrint textonly
   DetailPrint "Установка основных компонентов"
   SetDetailsPrint listonly
   SetOutPath "$INSTDIR"
   ExecWait '"$INSTDIR\install_old.exe"'

   !insertmacro SETPOS 50 ;устанавливаем на 50%.
   SetDetailsPrint textonly
   DetailPrint "Установка дополнительных компонентов"
   SetDetailsPrint listonly
   SetOutPath "$INSTDIR"
   ExecWait '"$INSTDIR\install_new.exe"
   !insertmacro SETPOS 100 ;устанавливаем на 100%.
SectionEnd

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


Отправлено: 23:15, 25-02-2012 | #2336


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


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

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


Спасибо за вариант.
Жаль, но не помогает... Прогресс всё равно стремглав бежит вперёд, ориентируюясь на команды скрипта.
Нужно установить тотальный контроль за прогрессом...
Если вам не сложно, посмотрите что за зверь такой Real Progress plugin. Как его можно использовать в моём случае.
Думаю это не должно пройти за зря, т.к можно потом для пользователей отобразить пример в русской справке по NSIS.
Кстати, спасибо вам за этот справочник. Незаменимая вещь в хозяйстве. Надеюсь проект справки не заброшен и будет обновляться - это в качестве пожелания.
________________________________
Была у меня также мысль (подсмотрел в каком-то из установщиков) относительно того, чтобы когда начинают выполняться функции запуска и ожидания - в этот момент всплывает долнительный мини-прогресс бар где и показывался ход установки компонентов. Но опять же, нигде не нашёл примеров кода по прогрессу.

Отправлено: 00:02, 26-02-2012 | #2337


Аватара для wolkow70

Ветеран


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

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


kotkovets, Подскажите пожалуйста возможно ли сделать такое:

Есть группа секций "Установить Winamp Agent"

В одной из секций опция "Запустить WinampAgent после установки"

Exec "$INSTDIR\winampa.exe"

Как можно реализовать, что бы при установке галочки на чебоксе действительно агент запускался после успешной установки?

Если прописать в функцию Function .onInstSuccess, то как реализовать условие значения в секции?

-------
Человек человеку - друг, товарищ и волк!


Отправлено: 13:31, 26-02-2012 | #2338


Аватара для kotkovets

Ветеран


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

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


Цитата wolkow70:
Есть группа секций "Установить Winamp Agent"
В одной из секций опция "Запустить WinampAgent после установки"
Exec "$INSTDIR\winampa.exe"
Как можно реализовать, что бы при установке галочки на чебоксе действительно агент запускался после успешной установки?
Если прописать в функцию Function .onInstSuccess, то как реализовать условие значения в секции? »
xex..., проверяете, считываете состояние секции и наличие файлика собственно.
Код: Выделить весь код
SectionGroup  /e "some stuff"

Section "install"
SectionEnd

Section "exec" SEC1
SectionEnd

SectionGroupEnd

Function .onInstSuccess
     ${If} ${SectionIsSelected} ${SEC1}
     ${AndIf} ${FileExists} "$INSTDIR\winampa.exe"
           Exec "$INSTDIR\winampa.exe"
     ${EndIf}
FunctionEnd
Цитата Sidril:
Нужно установить тотальный контроль за прогрессом...
Если вам не сложно, посмотрите что за зверь такой Real Progress plugin. Как его можно использовать в моём случае. »
Да вроде бы элементарно...допустим у вас есть 5 блоков команд,
т.е после каждого блока команды двигаем на 20%
и так до 100%, т.е рассчитываете сколько у вас блоков однотипных команд и
сотню делите на кол-во блоков однотипных команд.
читать дальше »
Код: Выделить весь код
Section
  RealProgress::FileProgress /NOUNLOAD 0 
  Sleep 300    ;[блок команд]
  RealProgress::FileProgress /NOUNLOAD 20 ;установка прогресса на 20%.
  Sleep 300    ;[блок команд]
  RealProgress::FileProgress /NOUNLOAD 40
  Sleep 300    ;[блок команд]
  RealProgress::AddProgress /NOUNLOAD  60
  Sleep 300    ;[блок команд]
  RealProgress::AddProgress /NOUNLOAD  80
  Sleep 300    ;[блок команд]
  RealProgress::AddProgress /NOUNLOAD  100 ;установка прогресса на 100%.
  SectionEnd

## Unload the plugin so that it can be deleted!
Function .onGUIEnd
  RealProgress::Unload
FunctionEnd

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


Последний раз редактировалось kotkovets, 26-02-2012 в 15:28.

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

Отправлено: 14:34, 26-02-2012 | #2339


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


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

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


Большое спасибо. вроде примерно понял.
Вы привели пример File Progress
Там также есть Detail и Gradual progress. Неплохо бы узнать чем они отличаются.

В моём установщике несколько компонентов, которые устанавливаются по желанию клиента. Т.е несколько секций в скрипте имеется... Как в этом случае сохранить адекватность продвижения прогресс бара, если заранее не известно будет ли клиент устанавливать тот или иной компонент или нет. Первая секция обязательна к установке остальные на выбор.
На примере двух секций.
;__________________________________________________
Section "Ключевые составляющие" Sec1
SectionIn RO
RealProgress::FileProgress /NOUNLOAD 0
Sleep 300 ;[блок команд]
RealProgress::FileProgress /NOUNLOAD 20 ;установка прогресса на 20%.
Sleep 300 ;[блок команд]
RealProgress::FileProgress /NOUNLOAD 40
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD 60
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD 80
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD 100 ;установка прогресса на 100%.
SectionEnd

Section "Авторские обновления" Sec2
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD ??? ;какой параметр прогресса должен быть?
SectionEnd

;__________________________________________________

Какой параметр прогресса должен быть в случае если клиент захочет установить "Авторские обновления"? По скрипту выходит что после выполнения первой секции прогресс-бар будет на 100%, а установка не завершится, т.к пойдёт выполнения следующей секции. С другой стороны - если клиент не захочет устанавливать "Авторские обновления", то тогда прогресс 100 в первой секции правильный... Довольно сумбурная схема... Как бы так сделать чтобы волков накормить, и овец сохранить?

Отправлено: 00:19, 27-02-2012 | #2340



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Мультимедиа - WinAmp .:[ обсуждение всех версий ]:. ssaram Программное обеспечение Windows 406 12-02-2022 19:45
WinstyleMonitor .:[все вопросы]:. Mr dUSHA Проект WinStyle 331 12-02-2014 13:15
Delphi - Delphi .: [все вопросы] :. Serega Программирование и базы данных 94 04-05-2013 18:45
Доступ - Никак не удаляются файлы (AVI и все остальные форматы) .:[все вопросы]:. Microsoft Windows 2000/XP 105 30-06-2010 11:58
Вопросы по создателю инсталляций NSIS MaxDELETE Программное обеспечение Windows 14 04-07-2007 10:01




 
Переход