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

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

 

Аватара для Flix

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


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

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


Цитата MKN:
но громоздко в коде + известные недостатки... »
Я с самого начала об этом говорил, но человек спросил без сторонних разработок, средствами самого NSIS. Главное дать идею, а дальше уж пускай развивает её сообразно имеющемуся опыту и знаниям.

Отправлено: 17:35, 06-03-2014 | #1081



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

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


Аватара для wolkow70

Ветеран


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

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


Не сложный макрос для проверки ключа реестра на наличие:

читать дальше »
!include "LogicLib.nsh"

!macro IfKeyExists ROOT MAIN_KEY KEY
Push $R0
Push $R1
Push $R2
StrCpy $R1 "0"
StrCpy $R2 "0"
${Do}
EnumRegKey $R0 ${ROOT} "${MAIN_KEY}" "$R1"
${If} $R0 == "${KEY}"
StrCpy $R2 "1" # found
${Break}
${EndIf}
IntOp $R1 $R1 + 1
${LoopWhile} $R0 != ""
ClearErrors
Exch 2
Pop $R0
Pop $R1
Exch $R2
!macroend

Пример использования :
!insertmacro IfKeyExists "HKCU" "Software\Classes" ".MP3"
Pop $R0
;
${If} $R0 == "1"
MessageBox MB_OK "Ключ существует"
${ElseIf} $R0 == "0"
MessageBox MB_OK "Ключ не существует"
${EndIf}

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


Последний раз редактировалось wolkow70, 11-03-2014 в 17:51.


Отправлено: 15:01, 11-03-2014 | #1082

MKN MKN вне форума

Ветеран


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

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


Цитата wolkow70:
Не сложный макрос для проверки ключа реестра на наличие: »
А разве классическая проверка не работает ? :
Код: Выделить весь код
ClearErrors
EnumRegKey $0 HKCR "SOFTWARE\Test" 0
IfErrors 0 keyexist
  # key does not exist
keyexist:
или
Код: Выделить весь код
ClearErrors
ReadRegStr $0 HKLM "SOFTWARE\Test" ""
${If} ${Errors}
; или , в зависимости от ситуации,  используем ${If} $0 == ""
  # key does not exist
${EndIf}
а для более "расширенных" случаев, лучше использовать Registry plug-in http://nsis.sourceforge.net/Registry_plug-in
Код: Выделить весь код
KeyExists (check if registry key exists) 
${registry::KeyExists} "[fullpath]" $var

Последний раз редактировалось MKN, 12-03-2014 в 11:09.


Отправлено: 10:46, 12-03-2014 | #1083

MKN MKN вне форума

Ветеран


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

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


может кому пригодится - конвертация размера файла из KB в MB :
Код: Выделить весь код
OutFile "Size_test.exe"
Var InSize
Var OutSize

Section
;задаём размер в KB, который надо конвертировать
;StrCpy $InSize 1024
StrCpy $InSize 2048
StrCpy $1 $InSize

IntCmp $1 1024 +3 +1 +3
StrCpy $1 "$1.0KB"
Goto +12
IntOp $1 $1 * 100
IntOp $1 $1 / 1024 
StrCpy $2 $1 "" -1  
StrCpy $3 $1 1 -2  
StrCpy $1 $1 -2    
IntCmp $2 5 +1 +2 +1    
IntOp $3 $3 + 1
StrCmp $3 10 +1 +3
StrCpy $3 0
IntOp $1 $1 + 1
StrCpy $1 "$1.$3 MB"     

StrCpy $OutSize $1
MessageBox MB_ICONINFORMATION|MB_OK '$InSize KB  = $OutSize'
SectionEnd

Отправлено: 12:20, 13-03-2014 | #1084

MKN MKN вне форума

Ветеран


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

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


Пользовательские иконки из DLL - в MessageBox
Уже был макрос для этого , но можно использовать и такой вариант :

Код: Выделить весь код
outfile MessageBoxIco_test.exe
!define MSGBOXPARAMS '(i, i, i, t, t, i, t, i, i, i) i'
!define ID_ICO 16

Section
System::Call 'Kernel32::LoadLibrary(t "Fileicons.dll") i .r1'
IntCmp $1 0 Err Err 0
System::Call '*${MSGBOXPARAMS}(40, $HWNDPARENT, r1, "Текст сообщения", "  Заголовок", 0x80|0x0, i ${ID_ICO}, 0, 0, 0) .r3'
System::Call 'User32::MessageBoxIndirect(i r3) v r4'
System::Call 'Kernel32::FreeLibrary(i r1) v r4'
System::Free $3
Err:
SectionEnd

; Кнопки и надписи действий на кнопках
; 0x0 - ОК
; 0x1 - ОК Отмена
; 0x2 - Прервать Повтор Пропустить
; 0x3 - Да Нет Отмена
; 0x4 - Да Нет
; 0x5 - Повтор Отмена
; 0x6 - Отмена Повторить Продолжить
; 0x4000 - ОК Справка
Fileicons.dll - это в примере, библиотека из TotalCommander_a. Ессно можно использовать любую DLL. ( Не забываем организовать путь к библиотеке. Из $PLUGINSDIR или как угодно )
Номер ID_ICO необходимой иконки из DLL - смотрим в любом редакторе ресурсов.

Последний раз редактировалось MKN, 14-03-2014 в 10:45.

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

Отправлено: 10:39, 14-03-2014 | #1085


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


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

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


Есть такой плагин WPatch
Вместе с ним идет пример сценария.

Код: Выделить весь код
; WPatch - Sample script

!system "rmdir /s /Q dir_to_patch"
!system "xcopy /E /Q /H dir1\* dir_to_patch\"

!ifdef TARGETDIR
!addplugindir "${TARGETDIR}"
!else
!addplugindir "..\..\bin"
!endif

Name "Sample WPatch"
OutFile Sample.exe
ShowInstDetails show
InstallDir $EXEDIR\dir_to_patch
Page directory
Page instfiles

Section
    InitPluginsDir
SectionEnd

!include WGenPatDir.nsh

Section
    IfErrors 0 +2
        MessageBox MB_OK "There has been some errors !"
SectionEnd
Вопрос по выделенным красным строках (для общего развития)

В примере также имеются папки с файлами dir1 и dir2. Соответственно, первая - с исходными файлами и папками, вторая - с измененными.
После запуске батника создается файл отличий *.pat и WGenPatDir.nsh, который в дальнейшем будет использоваться для пропатчивания.

Если я правильно понял вторую строку, то содержимое папки dir1 должно скопироваться в папку dir_to_patch во время компиляции сценария?
Созданный патч Sample.exe после запуска "натравливается" на содержимое этой папки dir_to_patch.

В реальности, папка dir_to_patch удаляется, а такая же, с исходным содержимым папки dir1, не появляется. В чем прикол?
В русскоязычном Руководстве о параметрах команды !system написано не очень много и не совсем по-русски.

Практически же, я в InstallDir прописываю путь к нужной мне (исходной) папке, содержимое которой дублируется в папке dir1 для создания данных патча , а выделенные красным строки игнорирую, как комментарий.

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


Отправлено: 15:10, 16-03-2014 | #1086


Аватара для kotkovets

Ветеран


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

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


Цитата Kopejkin:
!system написано не очень много и не совсем по-русски. »
! - с этого символа: это команды компилятора.
!system - компилятор задействует системные ресурсы (приложения)
Цитата:
!system "rmdir /s /Q dir_to_patch"
!system "xcopy /E /Q /H dir1\* dir_to_patch\"
1 перед компиляцией удаляется каталог dir_to_patch относительно скрипта
2 копируется содержимое каталога dir1 в каталог dir_to_patch
(этот каталог создается заново, для того, что бы не попали в проект файлы предыдущей компиляции)
Цитата Kopejkin:
В реальности, папка dir_to_patch удаляется, а такая же, с исходным содержимым папки dir1, не появляется. В чем прикол? »
посмотрите ключи системной утилиты xcopy

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


Последний раз редактировалось kotkovets, 17-03-2014 в 15:34.

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

Отправлено: 15:29, 17-03-2014 | #1087


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


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

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


Используя в сценарии этот код
Код: Выделить весь код
 

  !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}_Localize"
  !define PRODUCT_UNINST_ROOT_KEY "HKLM"

  SetShellVarContext all
       CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"  
       CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Удалить русификатор ${PRODUCT_NAME}.lnk" "$INSTDIR\unrus.exe"
       WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}${PRODUCT_VERSION}. Удалить русификатор"
       WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\unrus.exe"
       WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "1.0"
       WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "©Kopejkin, 03/2014"
       WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\unrus.exe"
       WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
читать дальше »

На Windows 8 я получаю ярлыки в Панели управления



и, как бы, в меню Пуск.



А ярлыков не видно ни здесь



ни здесь




На Win7 ярлык нормально отображается в меню Пуск. Как правильно написать и для Win 8?
Разрядность ОС - только х64

Последний раз редактировалось Kopejkin, 21-03-2014 в 17:36.


Отправлено: 15:42, 21-03-2014 | #1088


Аватара для Flix

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


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

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


Kopejkin, если во всем сценарии нет ошибок, то все ярлыки будут созданы согласно указанным командам. По крайней мере у себя я таких проблем не наблюдаю (пользуюсь NSIS v3.0a2). Вот проверил на виртуалке:

Отправлено: 02:54, 22-03-2014 | #1089


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


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

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


Flix, поделитесь этим тестовым сценарием, пожалуйста. Попробую сам разобраться, а для этого потребуется 100% рабочий.

Последний раз редактировалось Kopejkin, 22-03-2014 в 03:56.


Отправлено: 03:51, 22-03-2014 | #1090



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




 
Переход