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

Компьютерный форум 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.:
тебе нужно просто подсчитать разницу во времени? »
Главное, не подсчитать, а отображать отсчёт реального время с нулевого момента старта и до стоп момента.
Т.е. идёт процесс - наглядно отображается время с нуля-начала процесса.
Процесс закончился - отображение исчезло (+ , если возможно, заненсение результата в переменную)

Отправлено: 11:30, 16-02-2013 | #261



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

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


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

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


Contributor


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

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


Цитата MKN:
Главное, не подсчитать, а отображать отсчёт реального время с нулевого момента старта и до стоп момента. »
а, ну тогда здесь нужно отдельный поток создавать...
Попробуй плагин ThreadTimer plug-in, там в callback функции пропиши определение времени, затем сообщения "WM_SETTEXT" на элемент, который будет таймер отображать
Сам не пробовал (сейчас времени нет), чисто теория

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


Отправлено: 11:52, 16-02-2013 | #262

MKN MKN вне форума

Ветеран


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

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


Цитата K.A.V.:
плагин ThreadTimer plug-in »
И это не то... Он не реальное время отсчитывает, а просто циферки...

Может как то самим организовать отсчёт ? : для минут и секунд заявим 3 переменные, которые будут обозначать разряды времени :
$1 - десятки минут ( от 0 до 5 ), $2 - единицы минут (от 0 до 9), $3 - "сдвоенный" разряд, отсчёта секунд от 00 до 59. (или всё же лучше разделить разряды секунд на десятки и единицы ? Но по моему не обязательно...)

и начнём посекундный отсчёт, с занесением ( и одновременно отображением) значений в эти переменные по следующей логике :
как только отсчёт секунд достигнет 59, через следующую секунду $3 обнуляется до 00 , а в $2 - разряда единиц минут заносится - 1, и отсчёт секунд начинается вновь c 00 до 59
Когда цикл счёта секунд до 59+1 вновь завершится, к единицам минут добавится ещё единичка и так до 9, после чего добавляется единица в разряд десятков минут, т.е. в $1.
И так до достижения 59 мин 59 секунд. А больше вообщем то и не надо, и такое то значение вряд ли когда понадобится на практике...
(хотя в идеале часы тоже надо бы учесть...)

Последний раз редактировалось MKN, 16-02-2013 в 12:40.


Отправлено: 12:01, 16-02-2013 | #263


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

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


Contributor


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

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


Цитата MKN:
И это не то... Он не реальное время отсчитывает, а просто циферки... »
Да гад ты, всё-таки заставил меня написать код
Я тебе его дал для создания отдельного потока, без которого обновлять элементы (менять циферки, пока идёт распаковка файлов к примеру) не получится

Короче вот смотри код, смотри на заголовок окна А там уже добавишь высчитывание диапазона времени, если нужно (плагином Time plug-in)

Код: Выделить весь код
; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "Моя программа"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "Моя компания, LLC."
!define PRODUCT_WEB_SITE "http://www.mycompany.com"

; MUI 1.67 compatible ------
!include "MUI.nsh"
!include WinMessages.nsh
XPStyle on
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"

; Welcome page
!insertmacro MUI_PAGE_WELCOME
; Directory page
#!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES

; Finish page
!insertmacro MUI_PAGE_FINISH

; Language files
!insertmacro MUI_LANGUAGE "Russian"


!include "FileFunc.nsh"
!insertmacro GetTime
var day 
var month 
var year 
var name_day 
var hour 
var minute 
var seconds
var HWND_Timer

; MUI end ------


Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"
InstallDir "$TEMP"
ShowInstDetails show


; Получаем Handle
Section -TEST

#GetDlgItem $HWND_Timer $HWNDPARENT 1028
#SendMessage $HWND_Timer ${WM_SETTEXT} "" "STR:TEST"

    GetFunctionAddress $0 FuncTimer
    ThreadTimer::Start /NOUNLOAD 1000 -1 $0
SectionEnd

Function FuncTimer
${GetTime} "" "L" $day $month $year $name_day $hour $minute $seconds
SendMessage $HWNDPARENT ${WM_SETTEXT} "" "STR:$hour:$minute:$seconds"
FunctionEnd




Section
sleep 2000  
SectionEnd
Section
sleep 100  
SectionEnd
Section
sleep 300  
SectionEnd
Section
sleep 499  
SectionEnd
Section
sleep 5000  
SectionEnd
Section
sleep 100  
SectionEnd
Section
sleep 2000  
SectionEnd
Section
sleep 300  
SectionEnd
Section
sleep 100  
SectionEnd





















Section -Post
SectionEnd

Это тебе как в пример, блин пока писал, ты тут понаписал много чего про цифры
Сейчас прочитаю и вникну в суть

---
Цитата MKN:
Может как то самим организовать отсчёт ? : для минут и секунд заявим 3 переменные, которые будут обозначать разряды времени :
$1 - десятки минут ( от 0 до 5 ), $2 - единицы минут (от 0 до 9), $3 - "сдвоенный" разряд, отсчёта секунд от 0 до 59.
и начнём посекундный отсчёт, с занесением ( и одновременно отображением) значений в эти переменные по следующей логике :
как только отсчёт секунд достигнет 59, через следующую секунду $3 обнуляется до 00 , а в $2 - разряда единиц минут заносится - 1, и отсчёт секунд начинается вновь c 00 до 59
Когда цикл счёта секунд до 59+1 вновь завершится, к единицам минут добавится ещё единичка и так до 9, после чего добавляется единица в разряд десятков минут, т.е. в $1.
И так до достижения 59 мин 59 секунд. А больше вообщем то и не надо, и такое то значение вряд ли когда понадобится на практике...
(хотя в идеале часы тоже надо бы учесть...) »
ё-моё, разве тот варинат, который я предложил, не устраивает???
Тот плагин "Time", там можно подсчитать разницу во времени, т.е. смотри:
запускается инсталлер - команда определения времени
в той функции, которую я тебе выше написал (для отображения часов в реальном времени) там прописываем команду на математическую операцию (из текущего времени вычитаем то, которое было на момент запуска инсталлера) и таким образом получаем то время, которое работает инсталлер на текущий момент
Решил изобрести велосипед??

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


Последний раз редактировалось K.A.V., 16-02-2013 в 12:43.


Отправлено: 12:37, 16-02-2013 | #264

MKN MKN вне форума

Ветеран


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

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


K.A.V.,
Не, мы кажись не поняли друг друга...
Сначала. Чего я хотел : идёт процесс (или не идёт, всё равно) , в окне инсталлера наблюдаем оконце с таймером, который я запускаю как душе угодно. Или вовсе автономно или когда начнётся процесс установки.
Таймер после запуска начинает отсчёт с 00:00. Ключевой момент - от 00: 00. Для начала - всё. Вот, как то так...

Последний раз редактировалось MKN, 16-02-2013 в 12:54.


Отправлено: 12:49, 16-02-2013 | #265


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

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


Contributor


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

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


MKN, да блин, какая разница то? Используй плагин time и делай математическую операцию
Ведь всё к одному и тому-же сходится один фиг

Держи, дружище
Копайся
Код: Выделить весь код
!include "MUI2.nsh"
!include "FileFunc.nsh"
!include "LogicLib.nsh"
!include "WinMessages.nsh"
!include "nsDialogs.nsh"

!include "FileFunc.nsh"
!insertmacro GetTime
var day 
var month 
var year 
var name_day 
var hour 
var minute 
var seconds
var S_day 
var S_month 
var S_year 
var S_name_day 
var S_hour 
var S_minute 
var S_seconds
!include "Time.nsh"

Page custom func
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_LANGUAGE "Russian" 

Name "TEST.exe"
Caption "TEST.exe"
OutFile "TEST.exe" 
ShowInstDetails show 
XPStyle on

Var dlg
Var RadioButton1
Var RadioButton2
Var CheckBox
Var Label
Var button
var TimerStarted






 
Function func
 nsDialogs::Create 1018
 pop $0

 GetDlgItem $0 $HWNDPARENT 1037
 SendMessage $0 ${WM_SETTEXT} 0 "STR:Мой текст строки №1"

 GetDlgItem $0 $HWNDPARENT 1038
 SendMessage $0 ${WM_SETTEXT} 0 "STR:Мой текст строки №2"

 
 ${NSD_CreateButton} 25u 27u 150u 15u "Жми давай!"
 pop $button
 ${NSD_OnClick} $button StartTimer
 
 ${NSD_CreateLabel} 0 5u 200u 200u "Здесь будет времечко ;)" 
 pop $Label
    GetFunctionAddress $0 FuncTimer
    ThreadTimer::Start /NOUNLOAD 1000 -1 $0
  
 nsDialogs::Show 
FunctionEnd


Function StartTimer
# Добавил переменную, потому что при старте сразу идёт отображение времени
StrCpy $TimerStarted 1
${GetTime} "" "L" $S_day $S_month $S_year $S_name_day $S_hour $S_minute $S_seconds
    GetFunctionAddress $0 FuncTimer
    ThreadTimer::Start 1000 -1 $0
FunctionEnd   

Function FuncTimer
# Добавил переменную, потому что при старте сразу идёт отображение времени
StrCmp $TimerStarted "1" +2 0
abort
SendMessage $button ${WM_SETTEXT} "" "STR:Жми ещё для сброса таймера!"
${GetTime} "" "L" $day $month $year $name_day $hour $minute $seconds
${time::MathTime} "second($day.$month.$year $hour:$minute:$seconds) - second($S_day.$S_month.$S_year $S_hour:$S_minute:$S_seconds) =date" $0
StrCpy $0 $0 "" -8  ; Здесь мы отсекаем строку даты, оставляя только часы/минуты/секунды
SendMessage $Label ${WM_SETTEXT} "" "STR:Время: $hour:$minute:$seconds (с момента запуска прошло: $0)"
FunctionEnd
 


Section
;SetAutoClose true
SectionEnd

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

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

Отправлено: 13:27, 16-02-2013 | #266

MKN MKN вне форума

Ветеран


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

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


K.A.V.,
Однако, как хитро запутанно... Благодарю !

Отправлено: 13:36, 16-02-2013 | #267


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


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

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


Здравствуйте! Нижепредставленый код загружает в RichDesc содержимое из rtf файла. Но на компьютере конечного пользователя требуется наличие этого файла.
Можно ли его при компиляции также прикрепить этот файл и загружать его в RichDesc из инсталлятора, а не из папки?
Это для того, чтобы не таскать вместе с инсталлятором rtf файлы.

Код: Выделить весь код
nsDialogs::CreateControl "RichEdit20A" ${ES_READONLY}|${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_CLIENTEDGE} 0 15u 100% 120u'' 
pop $RichDesc 
${LoadRTF} readme.rtf $RichDesc
Заранее спасибо

Отправлено: 00:13, 17-02-2013 | #268


Аватара для kotkovets

Ветеран


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

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


Цитата Awral:
этот файл и загружать его в RichDesc из инсталлятора, а не из папки? »
точно также, как и файлы в установщик добавляете..
но можно во временную папку для работы плагов (установщик автоматом создает и по завершении работы подчищает)
Код: Выделить весь код
    InitPluginsDir
    SetOutPath "$PluginsDir"
    File "readme.rtf"
    ${LoadRTF} "$PluginsDir\readme.rtf" $RichDesc

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

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

Отправлено: 00:51, 17-02-2013 | #269


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


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

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


Подскажите что я делаю не так. Есть код:

читать дальше »
!include "FileFunc.nsh"
Var prog

Section "Program"
SectionIn 1
ReadRegStr $0 HKLM "Software\microsoft\windows\currentversion\uninstall\Program" "UninstallString"
${GetParent} "$0" $prog
IfFileExists $prog\Uninstall.exe 0 +2
Goto ok
ReadRegStr $0 HKLM "Software\wow6432node\microsoft\windows\currentversion\uninstall\Program" "UninstallString"
${GetParent} "$0" $prog
IfFileExists $prog\Uninstall.exe 0 +2
Goto ok
SetOutPath $INSTDIR
File /r "${pkgdir}\Program.exe"
ExecWait "$INSTDIR\Program.exe /S"
ok:
SectionEnd


Этим кодом я хочу проверить установлена ли библиотека и если нет, то установить. В UninstallString прописан путь к Uninstaller программы полностью вместе с файлом, поэтому использую ${GetParent}, чтобы отсечь Uninstall.exe и получить просто путь, ну а далее проверка есть лигтштыефдд в папке, если есть значит пропустить, но почему-то этот код не катит, постоянно идёт установка, хотя по пути в реестре всё есть. Проверка в реестре 2 раза, т.к. при установке в 32 битной и 64 битной системе путь в реестре разный.

Отправлено: 20:48, 17-02-2013 | #270



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




 
Переход