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

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

 
MKN MKN вне форума

Ветеран


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

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


K.A.V.,
И с твоим комплектом те же ошибки... Писец какой то...
PS нашёл причину... если FileVerInfo.nsh лежит в одном каталоге со скриптом - ошибка. стОит его убрать - всё ОК...

Последний раз редактировалось MKN, 09-04-2015 в 18:12.


Отправлено: 18:02, 09-04-2015 | #1571



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

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


Ветеран


Автор проектов


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

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


Прошу помощи.
В скрипте для конструктора AkelPad я использую для запуска утилит команду вида:
Код: Выделить весь код
 ExecWait 'hidcon.exe takeown.exe /F "$R8"'
Я решил не применять hidcon.exe для скрытия консольных окон, а использовать nsExec::Exec. На Win 8.1 инсталлятор после замены стал вылетать с ошибкой. Исследуя логи определил, что прекращение работы инсталлятора происходит при обработке следующего куска скрипта:
Код: Выделить весь код
  loop:
  ${Locate} "$WINDIR\WINSxS\" "/L=F /M=notepad.exe" "WINSxS"
  IfErrors loop 0
.
.
Function WINSxS
  System::Call "advapi32::GetUserName(t .r0, *i ${NSIS_MAX_STRLEN} r1) i.r2"
  nsExec::Exec 'takeown.exe /F "$R9"'
  nsExec::Exec 'icacls.exe "$R9" /grant $0:F'
  nsExec::Exec 'takeown.exe /F "$R8"'
  nsExec::Exec 'icacls.exe "$R8" /grant $0:F'

  ${GetSize} "$WINDIR\" "/M=notepad.exe /S=0K /G=0" $R0 $R2 $R3
  ${GetSize} "$R8" "/M=notepad.exe /S=0K /G=0" $R1 $R2 $R3
  ${If} $R0 == $R1
    StrCpy $Path2 '$Path2,$R8'
  ${Else}
    StrCpy $Path3 '$R8'
  ${EndIf}
  Push $0
FunctionEnd
Вылет происходит после команды Push $0. Если вместо nsExec::Exec использовать команду ExecWait 'hidcon.exe .....' , то всё нормально.
В чем может быть проблема

-------
Объективная реальность есть бред, вызванный недостатком алкоголя в крови.
Оптимизм есть недостаток информации.
Хочу быть змеёй, чтобы на работу лёжа ходить.
Конструктор инсталляторов на основе 7z SFX + готовые инсталляторы


Отправлено: 23:55, 09-04-2015 | #1572


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

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


Contributor


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

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


Цитата MKN:
PS нашёл причину... если FileVerInfo.nsh лежит в одном каталоге со скриптом - ошибка. стОит его убрать - всё ОК... »
Что-то у тебя там в сборке NSIS нахимичино, у меня инклуд в одной папке со скриптом и никаких проблем.

Цитата ya158:
Если вместо nsExec::Exec использовать команду ExecWait 'hidcon.exe .....' , то всё нормально.
В чем может быть проблема »
Вы используете плагин, который передаёт значения в NSIS инсталлятор, поэтому рекомендуется принимать значения из плагина командой Pop, а не оставлять это "как хочется"

Код: Выделить весь код
  System::Call "advapi32::GetUserName(t .R4, *i ${NSIS_MAX_STRLEN} r1) i.r2"
  ${GetSize} "$WINDIR\" "/M=notepad.exe /S=0K /G=0" $R0 $R2 $R3
  
  loop:
  ${Locate} "$WINDIR\WINSxS\" "/L=F /M=notepad.exe" "WINSxS"
  IfErrors loop 0                  

Function WINSxS    
  nsExec::Exec 'takeown.exe /F "$R9"'
  pop $R1
  nsExec::Exec 'icacls.exe "$R9" /grant $R4:F'
  pop $R1
  nsExec::Exec 'takeown.exe /F "$R8"'
  pop $R1
  nsExec::Exec 'icacls.exe "$R8" /grant $R4:F'
  pop $R1

  ${GetSize} "$R8" "/M=notepad.exe /S=0K /G=0" $R1 $R2 $R3
  ${If} $R0 == $R1
    StrCpy $Path2 '$Path2,$R8'
  ${Else}
    StrCpy $Path3 '$R8'
  ${EndIf}
  Push $0
FunctionEnd
И старайтесь писать менее грязный код, не делайте так, как у вас написано - не закидывайте лишних команд в callback функции как в Locate, на этом коде не будет заметно, но если производить поиск всех файлов, то при каждом найденном файле у вас будут отрабатывать 2 команды, которые в этом месте кода не нужны, это я говорю про команду получения информации о файле $WINDIR\notepad.exe и о вашей команде постоянного получения имени пользователя...

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

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

Отправлено: 05:42, 10-04-2015 | #1573

MKN MKN вне форума

Ветеран


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

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


Цитата K.A.V.:
Что-то у тебя там в сборке NSIS нахимичино »
Переустановил NSIS на всяк случай... Почему инклуд мешал, так и не понял, но так ведь было...
С FileVerInfo.nsh с определением версии файла всё нормально (но только с номером версии, всё остальное черт те что ! )


А MoreInfo plugin, с тем же файлом, по прежнему показывает только первый символ версии...

Последний раз редактировалось MKN, 10-04-2015 в 11:26.


Отправлено: 10:59, 10-04-2015 | #1574


Ветеран


Автор проектов


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

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


K.A.V.,
Большое спасибо. По поводу грязного кода - полностью согласен, недоглядел. Буду оптимизировать. С nsis сталкиваюсь очень мало. Не могли бы Вы пояснить поподробнее следующее:
Цитата K.A.V.:
Вы используете плагин, который передаёт значения в NSIS инсталлятор, поэтому рекомендуется принимать значения из плагина командой Pop, а не оставлять это "как хочется" »

-------
Объективная реальность есть бред, вызванный недостатком алкоголя в крови.
Оптимизм есть недостаток информации.
Хочу быть змеёй, чтобы на работу лёжа ходить.
Конструктор инсталляторов на основе 7z SFX + готовые инсталляторы


Отправлено: 11:46, 10-04-2015 | #1575


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

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


Contributor


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

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


Цитата MKN:
С FileVerInfo.nsh с определением версии файла всё нормально (но только с номером версии, всё остальное черт те что ! ) »
У меня точно так же, не знаю, в чем там проблема, хотя сама винда показывает описания корректно, видимо, где-то есть очередной подводный камень от Microsoft в использовании api функции по получения информации из файла.

Цитата ya158:
Не могли бы Вы пояснить поподробнее следующее: »
А что ещё пояснять?
Вы читали описание плагина, который используете?
Если на примере, то представьте, что вы вышли в сад собирать яблоки с другом, ваш товарищ кидает вам сорванные яблоки, надеясь, что вы поймаете, а вы думаете "не хочу ловить, пусть на земле полежат" и все яблоки, которые кидает вам друг - падают на землю. Вот и тут так же, плагин вам данные передаёт - вы их не принимаете.
Вообще, это спорный момент в NSIS (в NSIS вообще много разных "фишек" и багов), не всегда вы будете получать краш, если не будете принимать значения от плагинов, от чего это зависит - не могу сказать, т.к. прямо с программированием я не связан, возможно, получается какая-то каша со стеком из-за этого или ещё чего...Нужно всегда тестировать то, что пишите, особенно при использовании плагинов.
Что касается "фишек" NSIS, то об одной я тут писал недавно, когда при использовании команды ReadINIStr (чтение значения параметра из INI файла) в callback функции Locate - функция просто завершается, не продолжая поиск файлов.

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

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

Отправлено: 12:47, 10-04-2015 | #1576


Ветеран


Автор проектов


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

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


Цитата K.A.V.:
Вот и тут так же, плагин вам данные передаёт - вы их не принимаете. »
Видимо я не разобрался с работой плагина. Я думал, что задача плагина - запускать приложения. А на выходе - результат работы приложения. И, если мне не надо знать этот результат, то я его не использую. То есть, на вашем примере, задача - освободить дерево от яблок, а куда потом денутся яблоки - будут ли собраны в мешок или останутся лежать на земле - не важно.
Правильно ли я понял, что результат своей работы плагин помещает в стек и надо его оттуда "вынуть", чтобы не вызывать переполнения? Значит ли это, что после каждого вызова плагина требуется команда типа "pop $R1"?

-------
Объективная реальность есть бред, вызванный недостатком алкоголя в крови.
Оптимизм есть недостаток информации.
Хочу быть змеёй, чтобы на работу лёжа ходить.
Конструктор инсталляторов на основе 7z SFX + готовые инсталляторы


Отправлено: 17:58, 10-04-2015 | #1577


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

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


Contributor


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

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


Цитата ya158:
Я думал, что задача плагина - запускать приложения »
Так и есть, плагин справляется со своими обязанностями

Цитата ya158:
А на выходе - результат работы приложения »
Так и есть, только в переменную, содержащую "результат" может быть помещен разный результат, о возвращаемых значениях написано в файле ReadMe к плагину:
Цитата:
Return Value
------------
If nsExec is unable to execute the process, it will return "error"
on the top of the stack, if the process timed out it will return
"timeout", else it will return the return code from the
executed process.
Цитата ya158:
И, если мне не надо знать этот результат, то я его не использую »
Ну, как вы увидели в своём же примере кода - иногда всё-таки необходимо принимать возвращаемые плагином значения

Цитата ya158:
Правильно ли я понял, что результат своей работы плагин помещает в стек »
В цитате выше всё сказано, ReadMe к плагинам читайте

Цитата ya158:
Значит ли это, что после каждого вызова плагина требуется команда типа "pop $R1"? »
Опять же, смотря какой плагин и как он написан, не все плагины пишутся так, что они возвращают значения.
Конкретно насчет плагина nsExec вы уже сами увидели, если не принимать значения после исполнения команды - получите краш

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

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

Отправлено: 18:47, 10-04-2015 | #1578


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


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

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


Уважаемые. Как через NSIS определить включен ли Тестовый режим ОС (testsigning) любой разрядности. Я делал через cmd\bcdedit - очень громоздко...

Отправлено: 15:28, 21-04-2015 | #1579

MKN MKN вне форума

Ветеран


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

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


Цитата Salmo:
делал через cmd\bcdedit - очень громоздко... »
Чего же тут громоздкого... Известен такой вариант :
Код: Выделить весь код
; enable test signing
  nsExec::Exec '$SYSDIR\bcdedit.exe /set testsigning on'
  Pop $R0
  ${If} $R0 != 0
  Abort "Failed to enable test signing: $R0"
  ${EndIf}

  ; bcdedit requires a reboot
  SetRebootFlag true

Отправлено: 16:51, 21-04-2015 | #1580



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




 
Переход