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

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

Ветеран


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

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


Alex S,
На винампе подсказали :

Код: Выделить весь код
OutFile  Test.exe

!include LogicLib.nsh
!define /IfNDef CC_ANYCOLOR 0x00000100
!define /IfNDef CC_FULLOPEN 0x00000002

Section
System::Call '*(&l4, p $hWndParent, p0, i0, @r0, i ${CC_ANYCOLOR}|${CC_FULLOPEN}, p, p0, p0)p.r1'
System::Call 'COMDLG32::ChooseColorA(pr1)i.r0'
${If} $0 <> 0
System::Call '*$1(i,p,p,i.r0)'
IntFmt $0 "%.6X" $0
MessageBox MB_OK $0
${EndIf}
System::Free $1  
SectionEnd

Последний раз редактировалось MKN, 10-02-2025 в 20:00.


Отправлено: 18:12, 09-02-2025 | #2881



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

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


Аватара для Alex S

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


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

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


MKN, большое спасибо за помощь...
Выходной формат цвета здесь "Hex". Сейчас кинулся, а моя программа его не воспринимает никак. Для нее цвета должны записываться в кодировке "decimal". Вот такая вот фигня. Теперь буду искать способ получения результата в нужной кодировке. Если сам не разберусь, загляну на винамп, попрошу автора кода, может он поможет... Еще раз спасибо...

Отправлено: 01:43, 11-02-2025 | #2882

MKN MKN вне форума

Ветеран


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

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


Alex S,
Используй результат до конвертирования
System::Call '*$1(i,p,p,i.r0)'
MessageBox MB_OK $0
и примени к нему соотв. математику...

Последний раз редактировалось MKN, 11-02-2025 в 13:06.

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

Отправлено: 09:39, 11-02-2025 | #2883

MKN MKN вне форума

Ветеран


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

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


Вложения
Тип файла: zip Colors.zip
(617 байт, 1 просмотров)

Alex S,
Или можно из HEX получить RGB с помощью, например, известного Colors.nsh. Но это как то не очень красиво...
(можно и без хидера (.nsh) - просто поместить нужные макросы и назначения-определения (!define) в основной код скрипта. )

Код: Выделить весь код
!include Colors.nsh

!include LogicLib.nsh
!define /IfNDef CC_ANYCOLOR 0x00000100
!define /IfNDef CC_FULLOPEN 0x00000002

OutFile "colors.exe"
ShowInstDetails show

Section
System::Call '*(&l4, p $hWndParent, p0, i0, @r0, i ${CC_ANYCOLOR}|${CC_FULLOPEN}, p, p0, p0)p.r1'
System::Call 'COMDLG32::ChooseColorA(pr1)i.r0'
${If} $0 <> 0
System::Call '*$1(i,p,p,i.r0)'
IntFmt $0 "%.6X" $0
MessageBox MB_OK $0

StrCpy $9 $0

${EndIf}
System::Free $1 

${GetRvalueX} $0 "$9"
${GetGvalueX} $1 "$9"
${GetBvalueX} $2 "$9"
DetailPrint "Hex: $9 -> Red=$0; Green=$1; Blue=$2"
SectionEnd

Последний раз редактировалось MKN, 11-02-2025 в 16:51.

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

Отправлено: 13:03, 11-02-2025 | #2884


Аватара для Alex S

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


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

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


Честно говоря я мыслил в этом же направлении. Во время поиска вариантов нарвался на формулу преобразования rgb в decimal ((RRR*1)+(GGG*256)+(BBB*65536)). Теперь буду пробовать всё имеющееся собрать воедино...
MKN, спасибо тебе за помощь... Уважуха...

Отправлено: 18:19, 11-02-2025 | #2885


Аватара для Alex S

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


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

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


Думаю, что вопрос можно считать закрытым. Вот конечный результат:
Код:
!include Colors.nsh

!include LogicLib.nsh
!define /IfNDef CC_ANYCOLOR 0x00000100
!define /IfNDef CC_FULLOPEN 0x00000002

OutFile "colors.exe"
ShowInstDetails show

Section
System::Call '*(&l4, p $hWndParent, p0, i0, @r0, i ${CC_ANYCOLOR}|${CC_FULLOPEN}, p, p0, p0)p.r1'
System::Call 'COMDLG32::ChooseColorA(pr1)i.r0'
${If} $0 <> 0
System::Call '*$1(i,p,p,i.r0)'
IntFmt $0 "%.6X" $0
StrCpy $9 $0
${EndIf}
System::Free $1

${GetRvalueX} $0 "$9"
${GetGvalueX} $1 "$9"
${GetBvalueX} $2 "$9"

#HexToDecimal((RRR*1)+(GGG*256)+(BBB*65536))
IntOp $R3 $0 * 1
IntOp $R4 $1 * 256
IntOp $R5 $2 * 65536
IntOp $R6 $R3 + $R4
IntOp $R7 $R6 + $R5
MessageBox MB_OK " Hex: $9 $\n RGB: $0,$1,$2 $\n Decimal: $R7"
SectionEnd

Отправлено: 23:25, 11-02-2025 | #2886


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


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

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


Вопрос тупой, наверное, но не могу сообразить, в чем причина.
Есть мой старый сценарий, с помощью которого был создан необходимый инсталлятор. Возникла потребность обновить этот инсталлятор.
Компилятор почему-то стал запинаться на этой фразе, а именно на имени с пробелом: вместо одного параметра, он видит два. Проблема в имени с пробелом. Если убрать пробел, ошибка исчезает.

!insertmacro VPatchFile "genpat\Pro.pat" "$INSTDIR\super puper-3.exe" "$INSTDIR\temporaryfile.exe"

Чего ему нужно? Может это связано с недавней переустановкой системы (Win10x64) и софта? Так раньше на этом же железе, системе и софте все нормально работало. Пробовал NSIS 3.05 и 3.08.

Отправлено: 23:58, 11-02-2025 | #2887

MKN MKN вне форума

Ветеран


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

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


Kopejkin,
А если поэксперементировать с одинарными кавычками и не брать в кавычки один из параметров ?
Типа : nsExec::ExecToStack 'CMD.exe /C if 1==1 "c:\path with spaces\app.exe" param1 "par am 2"'

Alex S,
Хмм... А не занимались ли мы ерундой с конвертированием ?
Из функции ведь значения получаются как раз в decimal... Ничего конвертировать вообще не надо...
RGB сбило с толку... Но для общего развития было полезно...
System::Call '*$1(i,p,p,i.r0)'
MessageBox MB_OK $0 ;decimal

Последний раз редактировалось MKN, Вчера в 15:54.

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

Отправлено: 11:37, Вчера | #2888


Аватара для Flix

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


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

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


Цитата Kopejkin:
Компилятор почему-то стал запинаться на этой фразе, а именно на имени с пробелом: вместо одного параметра, он видит два. Проблема в имени с пробелом. Если убрать пробел, ошибка исчезает.
!insertmacro VPatchFile "genpat\Pro.pat" "$INSTDIR\super puper-3.exe" "$INSTDIR\temporaryfile.exe" »
Kopejkin, а в какой версии компилятора был собран тот инсталлятор?

В файле VPatchLib.nsh заключи переменные путей, которые заносятся в стек, в двойные кавычки.

Строки 16-17
Код: Выделить весь код
  Push "${SOURCEFILE}"
  Push "${TEMPFILE}"
Сохрани изменения в файле.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:01, Вчера | #2889


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


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

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


Цитата MKN:
...поэксперементировать с одинарными кавычками... »
Это пробовал в первую очередь.

Цитата Flix:
Строки 16-17...»
Спасибо, все заработало!!!
Для таких , как я, это нужно, наверное, в FAQ добавить.

P.S. Инсталлятор был создан в октябре 2020 года. У меня сохранено две версии NSIS 3.05 - оригинальная и русифицированная от Leserg (wylek.ru). В последней и был создан тот инсталлятор. Специально посмотрел содержимое VPatchLib.nsh. В русифицированной версии в строках 16-17 есть кавычки, в оригинальной версии кавычек нет. В оригинальной версии NSIS 3.08 кавычек тоже нет. Вероятно, с тех пор в моих сценариях не встречалось имен файлов с пробелами в макросах VPatch, поэтому и пробемы не возникало.

Еще раз спасибо!

Отправлено: 00:29, Сегодня | #2890



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




 
Переход