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

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


Вариант с перемещением вроде как работает, но отсчёт начинается почему то с 2. Как исправить ?

Код: Выделить весь код
outfile rename_enumerate-test.exe
Var /global n

Section
StrCpy $n 0
ClearErrors
FindFirst $0 $1 $EXEDIR\D\*.*
loop:
StrCmp $1 "" done
Rename "$EXEDIR\D\$1" "$EXEDIR\D1\$1"
Rename "$EXEDIR\D1\$1" "$EXEDIR\D1\0$n"
IntOp $n $n + 1
FindNext $0 $1
Goto loop
done:
FindClose $0
SectionEnd

Отправлено: 12:22, 01-04-2015 | #1551



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

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


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

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


Contributor


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

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


Цитата MKN:
но отсчёт начинается почему то с 2 »
Я же в посте выше всё описал...
Цитата K.A.V.:
Ещё один момент, когда перечисляешь все файлы в папке командой Find*, в переменную имени файла сбрасывается значение "." и "..", из-за чего счетчик так же может быть не правильным, проверку на эти значения я так же прописал »
Код: Выделить весь код
outfile rename_enumerate-test.exe
Var /global n

Section
StrCpy $n 0
ClearErrors
FindFirst $0 $1 $EXEDIR\D\*.*
loop:
StrCmp $1 "" done
StrCmp $1 "." next
StrCmp $1 ".." next
Rename "$EXEDIR\D\$1" "$EXEDIR\D1\$1"
Rename "$EXEDIR\D1\$1" "$EXEDIR\D1\0$n"
IntOp $n $n + 1
next:
FindNext $0 $1
Goto loop
done:
FindClose $0
SectionEnd
p.s.
а зачем, вообще, ты 2 раза команду прописываешь? одной разве не достаточно?
Код: Выделить весь код
Rename "$EXEDIR\D\$1" "$EXEDIR\D1\0$n"

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


Последний раз редактировалось K.A.V., 01-04-2015 в 19:10.

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

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

MKN MKN вне форума

Ветеран


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

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


Цитата K.A.V.:
в переменную имени файла сбрасывается значение "." и ".." »
точно так, прозевал этот момент... А с чего вдруг образуются эти странные значения ?
Цитата K.A.V.:
одной разве не достаточно? »
Начинал с одной, но почему то получается ахинея с нумерацией, если файлов много и имена начинаются с цифр...

ps Возвращаясь к поиску HEX значений в файлах, для которых "класический" код работает , как черепаха, т.е. не годен для практики.
Оказывается есть иной приём поиска. HEX-последовательность ищется сначала в первых 300 кб, потом в следующих и т.д.
Поэтому поиск выполняется очень быстро. Есть и готовая реализация, но на AutoIt3. Было бы интересно переконвертировтаь этот код в NSIS...
читать дальше »
Код: Выделить весь код
#cs HEX-последовательность ищется сначала в первых 300 кб, потом в следующих и т.д.
Поэтому поиск выполняется очень быстро.
#ce

Opt('MustDeclareVars', 1)

;~ поменяйте $sFile и $sHex на свои
Global $sFile = 'C:\ProgramNoAdmin\AutoIt3_381\AutoIt3.exe', $sHex = 'C4 04 84 C0 74 0B 84 DB 75 2D 32 C0 5B 8B E5', _
        $iOffSet, $hFile, $sRead

$iOffSet = _Find_HexString_In_File($sFile, $sHex)
If @error Then Exit ConsoleWrite('Error: ' & @error & @LF)
If Not $iOffSet Then Exit ConsoleWrite('Not hex string' & @LF)

ConsoleWrite('Offset = ' & $iOffSet & ' (hex offset = 0x' & Hex($iOffSet, 8) & ')' & @LF)
;~ проверяем полученный результат:
$hFile = FileOpen($sFile, 16)
FileSetPos($hFile, $iOffSet, 0);$FILE_BEGIN = 0
$sRead = Hex(FileRead($hFile, StringLen(StringStripWS($sHex, 8)) / 2))
FileClose($hFile)
ConsoleWrite($sRead & @TAB & ($sRead = StringStripWS($sHex, 8)) & @LF)

#cs
    Вернет при успехе позицию вхождения $s_HexString в файле $s_File или 0, если нет вхождения.
    При неудаче вернет 0 и флаг @error = :
    1   - нет файла $s_File;
    2   - длина $s_HexString не кратна 2;
    3   - не получилось открыть файл $s_File;
    4   - ошибка функции FileSetPos.

    Читает весь файл подряд по 300 Кб, можно поменять на нужные Вам
#ce
Func _Find_HexString_In_File($s_File, $s_HexString)
    Local Const $i_Read = 300 * 1024, $__FILE_CURRENT_ = 1
    Local $i_Len, $h_File, $b_Read, $i_Pos, $i_Count, $i_Err

    If Not FileExists($s_File) Then Return SetError(1, 0, 0)
    If IsBinary($s_HexString) Then
        $s_HexString = Hex($s_HexString)
    Else
        $s_HexString = StringStripWS($s_HexString, 8)
    EndIf
    $i_Len = StringLen($s_HexString)
    If Mod($i_Len, 2) Then Return SetError(2, 0, 0)
    $i_Len /= 2
    $h_File = FileOpen($s_File, 16)
    If $h_File = -1 Then Return SetError(3, 0, 0)
    While 1
        $b_Read = FileRead($h_File, $i_Read)
        If @extended <= $i_Len Then ExitLoop
        $i_Pos = StringInStr($b_Read, $s_HexString, 2)
        If Mod($i_Pos, 2) Then ExitLoop
        $i_Pos = 0
        If Not FileSetPos($h_File, -$i_Len, $__FILE_CURRENT_) Then
            $i_Err = 4
            ExitLoop
        EndIf
        $i_Count += 1
    WEnd
    FileClose($h_File)
    If $i_Err Then Return SetError($i_Err, 0, 0)
    If $i_Pos Then Return Int(($i_Pos - 1) / 2 - 1 + ($i_Read - $i_Len) * $i_Count)
    Return 0
EndFunc   ;==>_Find_HexString_In_File

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


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


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

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


Contributor


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

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


Цитата MKN:
А с чего вдруг образуются эти странные значения ? »
яжнепрограммист, откуда я знаю, видимо, из-за того, что перечисляются все файлы, а не конкретного типа

Цитата MKN:
Было бы интересно переконвертировтаь этот код в NSIS... »
Вот кому интересно, тот пусть и конвертирует, я AutoIt3 не знаю и разбираться в неизвестном мне языке как-то не особо хочется

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


Отправлено: 22:51, 03-04-2015 | #1554


Аватара для wolkow70

Ветеран


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

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


Что-то не могу собрать скрипт с конструкцией типа:

Section
StrCpy $0 "7"
${If} $0 => 5
MessageBox MB_OK "$0=>5"
${EndIf}
SectionEnd

Показывает, что нет такого "=>"
!insertmacro: macro named "_=>" not found!
Пример секции из справки, библиотека LogicLib.nsh есть, но у меня старый NSIS 2.46

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


Отправлено: 14:01, 04-04-2015 | #1555

MKN MKN вне форума

Ветеран


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

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


wolkow70,
Цитата wolkow70:
нет такого "=>" »
потому что нет...
есть (во всяком случае в С# ) :
>= Больше или равно

Отправлено: 14:21, 04-04-2015 | #1556


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

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


Contributor


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

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


Цитата wolkow70:
Что-то не могу собрать скрипт с конструкцией типа:
Section
StrCpy $0 "7"
${If} $0 => 5
MessageBox MB_OK "$0=>5"
${EndIf}
SectionEnd
Показывает, что нет такого "=>"
!insertmacro: macro named "_=>" not found!
Пример секции из справки, библиотека LogicLib.nsh есть, но у меня старый NSIS 2.46 »
Опечатка в нашем файле справки.
Вам нужно указать >=

LogicLib.nsh

; The following "expressions" are available:
; Standard (built-in) string tests (which are case-insensitive):
; a == b; a != b
; Additional case-insensitive string tests (using System.dll):
; a S< b; a S>= b; a S> b; a S<= b
; Case-sensitive string tests:
; a S== b; a S!= b
; Standard (built-in) signed integer tests:
; a = b; a <> b; a < b; a >= b; a > b; a <= b
; Standard (built-in) unsigned integer tests:
; a U< b; a U>= b; a U> b; a U<= b
; 64-bit integer tests (using System.dll):
; a L= b; a L<> b; a L< b; a L>= b; a L> b; a L<= b
; ptrdiff_t integer tests
; a P= b; a P<> b; a P< b; a P>= b; a P> b; a P<= b
; Built-in NSIS flag tests:
; ${Abort}; ${Errors}; ${RebootFlag}; ${Silent}
; Built-in NSIS other tests:
; ${FileExists} a
; Any conditional NSIS instruction test:
; ${Cmd} a
; Section flag tests:
; ${SectionIsSelected} a; ${SectionIsSectionGroup} a;
; ${SectionIsSectionGroupEnd} a; ${SectionIsBold} a;
; ${SectionIsReadOnly} a; ${SectionIsExpanded} a;
; ${SectionIsPartiallySelected} a

Примеры использования есть так же в файле "<NSIS>\Examples\LogicLib.nsi"

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


Отправлено: 14:27, 04-04-2015 | #1557


Аватара для wolkow70

Ветеран


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

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


Цитата MKN:
потому что нет...
есть :
>= Больше или равно »
Благодарствую за подсказку.
В таком случае, нужно авторам Справочника поправить ошибку, так как пример оттуда.

Цитата K.A.V.:
Вам нужно указать >= »
Спасибо за подсказку, заработало.

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


Отправлено: 14:28, 04-04-2015 | #1558

MKN MKN вне форума

Ветеран


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

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


Столкнулся с не возможностью совместного использования "FileVerInfo.nsh" и "FileFunc.nsh". При компиляции - ругань (отдельно, FileVerInfo.nsh работает нормально) .
Как их подружить ?

Отправлено: 13:41, 09-04-2015 | #1559


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

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


Contributor


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

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


Цитата MKN:
Столкнулся с не возможностью совместного использования "FileVerInfo.nsh" и "FileFunc.nsh" »
FileVerInfo.nsh - что это и где его достать то? В дистрибутиве NSIS - нету, поиском по сайту NSIS - нету, лениво вбил в гугл - и снова ничего

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


Отправлено: 13:56, 09-04-2015 | #1560



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




 
Переход