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

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

 

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

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


Contributor


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

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


Цитата Dodakaedr:
Как записать путь в таком виде в реестре? »
Используйте команду GetFullPathName с ключем /SHORT, учтите, что в пути не должно быть символов типа "%1", в команду посылаете только путь, а после преобразования пути уже можете добавить к нему остальное
Код: Выделить весь код
GetFullPathName /SHORT $0 "$PROGRAMFILES"
StrCpy $0 '$0 "%1"'
MessageBox MB_OK|MB_ICONINFORMATION "$0"
+Эту команду можно выполнять только если директория существует, в противном случае (если папки не существует) - вам вернётся пустое значение
Протестируйте в общем

Есть также WinAPI функция, делающая тоже самое
Код: Выделить весь код
StrCpy $0 '$PROGRAMFILES'
System::Call 'kernel32::GetShortPathName(t r0, t .r0, i ${NSIS_MAX_STRLEN}) i .r1'
StrCpy $0 '$0 "%1"'
MessageBox MB_OK|MB_ICONINFORMATION "$0"

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

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

Отправлено: 00:15, 29-09-2015 | #1851



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

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


Аватара для ZaxBoys66

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


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

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


Name "NSIS archive folder"

Page instfiles

OutFile "NSIS archive folder.exe"
InstallDir "$EXEDIR\NSIS archive folder"

SetCompressor /SOLID lzma

!define RUNASADMIN

!ifndef RUNASADMIN
RequestExecutionLevel 'admin' ;Require admin rights on NT6+ (When UAC is turned on)
!else
RequestExecutionLevel 'admin'
!endif

!include "FileFunc.nsh"
!include "LogicLib.nsh"
!include "TextFunc.nsh"
!include "WordFunc.nsh"

!insertmacro GetSize

Function .onInit
File "/oname=$TEMP\7za.exe" "7za\7za.exe"
FunctionEnd

var /global InSize
var /global OutSize
var /global SZ_1
var /global SZ_2
var /global SZ_3

Section "Program" P1

DetailPrint "Compressored filder..."

Setoutpath "$INSTDIR"

WriteINIStr "$INSTDIR\CatsSoft © 2015.url" "InternetShortcut" "URL" "http://portableroapps.blogspot.com/"

${If} ${FileExists} "$INSTDIR\CatsSoft © 2015.url"
nsExec::ExecToLog '"$TEMP\7za.exe" a "archive.7z" "$INSTDIR"'
${EndIf}
Delete "$TEMP\7za.exe"

${GetSize} "$INSTDIR" "/M=*.* /S=0K" $SZ_1 $SZ_2 $SZ_3
StrCpy $InSize 1024
StrCpy $InSize $SZ_1 / 1024
StrCpy $0 0
StrCpy $InSize $SZ_1
StrCpy $1 $InSize

IntCmp $1 1024 +3 +1 +3
StrCpy $1 "$1.0 KB"
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"
/*
How can pass here and GB
*/
StrCpy $OutSize $1

Messagebox MB_OK|MB_USERICON 'Size folder: $OutSize'

SectionEnd

Последний раз редактировалось ZaxBoys66, 30-09-2015 в 17:43.


Отправлено: 17:06, 30-09-2015 | #1852


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


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

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


Подскажите как изменить путь в скрипте при установке портативной и обычной версии программы .

Отправлено: 19:05, 02-10-2015 | #1853


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


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

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


ZaxBoys66, Спасибо огромное ! Буду пытаться прикрутить к своему скрипту.

Отправлено: 21:51, 02-10-2015 | #1854

MKN MKN вне форума

Ветеран


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

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


Иногда в Windows x64 необходимо определить разрядность установленного приложения (исполняемого файла).
Причём, установленного не в $PROGRAMFILES64 или $PROGRAMFILES, что могло бы служить ориентиром разрядности. А ещё имя исполняемого файла одинаково и для x32 и для x64. Как тут быть ?
Поможет функция GetBinaryType.

Код: Выделить весь код
OutFile "GetBinaryType.exe"
/*
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa364819(v=vs.85).aspx
    0: result := '32-bit Windows-based';
    1: result := 'MS-DOS – based';
    2: result := '16-bit Windows-based';
    3: result := 'PIF for MS-DOS – based';
    4: result := 'POSIX – based';
    5: result := '16bit-OS/2';
    6: result := '64-bit Windows-based';
*/
Section
  StrCpy $0 "$EXEDIR\unknown_bit.exe"
  System::Call `kernel32::GetBinaryType(t r0, *i .r2)`
  MessageBox MB_OK "$2"
SectionEnd

Последний раз редактировалось MKN, 06-10-2015 в 18:25.

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

Отправлено: 18:20, 06-10-2015 | #1855

MKN MKN вне форума

Ветеран


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

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


Когда то рассматривалось, как определять дефолтовое приложение (путь и имя) для открытия определённых типов файлов с помошью функции FindExecutable.

Ту же операцию можно сделать немного проще с помощью функции AssocQueryString.
Код: Выделить весь код
!define ASSOCSTR_EXECUTABLE 2
!define ASSOCF_NOTRUNCATE 0x00000020
!define ASSOCF_REMAPRUNDLL 0x00000080
!define ASSOCF_NOFIXUPS 0x00000100

System::Call 'SHLWAPI::AssocQueryString(i ${ASSOCF_NOTRUNCATE}|${ASSOCF_REMAPRUNDLL}|${ASSOCF_NOFIXUPS}, i ${ASSOCSTR_EXECUTABLE}, t ".html", t "open", t.r1, *i ${NSIS_MAX_STRLEN})i.r0'
MessageBox MB_OK "EXECUTABLE  $1"
Оба эти способа нормально работают в Windows 7, но к сожалению , не в Windows 10...

Используя AssocQueryString , в Windows 10, для штатных интегрированных приложений получаем - C:\Windows\system32\LaunchWinApp.exe
Возможно это связано с особенностями работы собственных приложений в новой ОС...

Для автономно установленных приложений (например, для Хрома и т.д. ) - всё нормально.

Как крайний выход из положения, в Windows 10 можно получить только имя дефолтового приложения, если использовать константу ASSOCSTR_FRIENDLYAPPNAME

Код: Выделить весь код
!define ASSOCSTR_FRIENDLYAPPNAME 4

System::Call 'SHLWAPI::AssocQueryString(i ${ASSOCF_NOTRUNCATE}|${ASSOCF_REMAPRUNDLL}|${ASSOCF_NOFIXUPS}, i ${ASSOCSTR_FRIENDLYAPPNAME}, t ".htm", t "open", t.r1, *i ${NSIS_MAX_STRLEN})i.r0'
MessageBox MB_OK "FRIENDLYAPPNAME   $1"
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:37, 10-10-2015 | #1856


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


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

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


Всем доброго времени суток! Имеется проблема решение которой затрудняюсь найти. В коде скрипта подключен плагин "nsArray". Массив полноценно, нормально работает при использовании его элементов. НО, при условии, что текст элементов написан на английском. Как только в элементе массива появляется русский текст, программа начинает крашиться, на этапе компиляции ошибок нет. Пробовал сохранять исходник в разных кодировках, безрезультатно. Сталкивался кто-нибудь?

nsArray::SetList MyArray "7-Zip" "Любой текст" "Adobe Reader" "Logitech Webcam" /end
${nsArray_ToString} MyArray $R9

Отправлено: 14:49, 17-10-2015 | #1857


Аватара для kotkovets

Ветеран


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

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


Цитата lavey13:
плагин "nsArray" »
так к "буржую" обращайся с поддержкой кирилицы

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


Отправлено: 08:37, 19-10-2015 | #1858


Аватара для Flix

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


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

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


Цитата lavey13:
Имеется проблема решение которой затрудняюсь найти. В коде скрипта подключен плагин "nsArray"... Как только в элементе массива появляется русский текст, программа начинает крашиться »
Не вижу проблем с кириллицей. Использовал NSIS v3.0b2, сценарий в кодировке UTF-8, активирован флаг компиляции Unicode.

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

Отправлено: 22:38, 19-10-2015 | #1859


Аватара для wolkow70

Ветеран


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

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


На Windows 10 выполняю
${WinVerGetMajor} $R0
${WinVerGetMinor} $R1
StrCpy $R0 $R0$R1
В результате в $R0 = 62, что соответствует Windows 8...
Как лучше определить, что юзаем десятку?

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


Отправлено: 14:06, 22-10-2015 | #1860



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




 
Переход