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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив].: NSIS - все вопросы :.

Закрытая тема
Настройки темы
[архив].: NSIS - все вопросы :.

Аватара для kotkovets

Ветеран


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


Конфигурация

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


Изменения
Автор: volk1234
Дата: 09-12-2012
Описание: перевод темы в архив.
Тема закрыта!
Лимит страниц.
Продолжение тут:
.: NSIS - все вопросы :. часть 2.
Старая шапка:
читать дальше »

Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения.

Описание:
читать дальше »
NSIS (Nullsoft Scriptable Install System) - профессиональная система для создания инсталляторов в среде Windows с октрытым исходным кодом. При своем малом размере система очень гибкая, и при с широкими возможностями. Генерируемый ею инсталлятор также имеет очень маленький размер и идеально подходит для распространения продукта через Интернет.


Текущая версия: 2.46 от 6 декабря 2009 года
Скачать | Архив сборок версии 2 | Архив сборок версии 1

ВНИМАНИЕ! Созданный в NSIS инсталлятор является ANSI-приложением. Есть возможность использовать UNICODE-сборку системы, но при этом ваши дистрибутивы не будут работать в ANSI-системах, таких, как Windows 9x. Для загрузки UNICODE-сборки системы посетите сайт: http://www.scratchpaper.com/

ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов:
Справочник по NSIS - создан силами нашего сообщества.
Руководство пользователя. Перевод – Поляков А.В, зеркало

Документация

Утилиты разработчика
Расширение функциональности
читать дальше »

Плагины и полезности к NSIS: http://nsis.sourceforge.net/Category:Plugins

Интерфейс Venis GUI: http://www.spaceblue.com/products/venis
Интерфейс ExperienceUI GUI http://experienceui.xx0r.info/oldeng...erienceui/home
Пример:


Интерфейс SkinCrafter Plugin - http://www.skincrafter.com/
Пример:

Инструкция по использованию от K.A.V.

Примеры скриптов на нашем форуме
Скрипт 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, если хотите скрыть некоторые файлы в вашей инсталляции.


===========
тема прикрепляется, шапка будет дорабатыватся... Volk1234, hb860

Отправлено: 23:35, 17-06-2006

 

Аватара для Valdise

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


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

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


Доброго времени суток!
Соблаговолите помочь советом "любителю".
Познакомился со скриптами довольно давно (на примерах от Авторов NSIS), уже несколько лет иногда собираю то что сам себе и дочкам русифицирую и чем сам постоянно пользуюсь.
Вопрос возник давно, но всё никак не мог нигде найти внятных объяснений.
Сейчас много чего перечитал на Озоне, но пока тоже не нашел то что ищу:

Интересует проверка при установке - не установлена-ли уже старая/более новая версия устанавливаемой программы.

-Например оригинальный установщик NSIS перед установкой идёт в Реестр, проверяет, не стоит-ли более новая, или старая версия NSIS и предлагает переустановиться.
-В оригинале скрипта makensis.nsi (в папке с примерами) всё вроде прописано.
Пробую на той-же NSIS, - например стояла 2.15 , в разделе Uninstall реестра значится 2.15, пробую ставить их сборку 2.45 - она предупреждает, предлагает переустановиться. Проставляю номер версии в скрипте, всё упаковывается, но новый мой инсталлятор ничего не проверяет и молча всё перезаписывает... И корневую папку и Реестр.

-Ткните, пожалуйста носом что делаю не так?

-А если ещё подскажете возможно-ли прописывать в деинсталлятор команду принудительно убивать деинсталлируемую программу (если она запущена) - вообще мне мёд будет :-)

Стараюсь НАНОСИТЬ добро...
и ПРИЧИНЯТЬ пользу...

Отправлено: 14:09, 20-05-2011 | #1191



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

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


Аватара для sawe

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


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

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


Чаще всего следует читать в реестре номер версии
Код: Выделить весь код
ReadRegStr $0 HKLM "SOFTWARE\куст_реестра" "имя_параметра"
 ; в $0 - будет инфо о версии!
Или прочесть из INI файла
Код: Выделить весь код
ReadINIStr $0 "$INSTDIR\Файл.ini" "Секция" "Имя" 
; в $0 - будет инфо о версии!
Если исполняемый или DLL файл содержит номер версии
Код: Выделить весь код
;Ваше определения!
!define VERSION 5.5.5.0 # версия. В скрипте будет выглялеть вот так  ${VERSION}
!define APP_NAME "программа" # Имя программы. В скрипте будет выглялеть вот так ${APP_NAME}

;----------------!

  GetDllVersion "$INSTDIR\XXX.exe" $R0 $R1
  IntOp $R2 $R0 / 0x00010000
  IntOp $R3 $R0 & 0x0000FFFF
  IntOp $R4 $R1 / 0x00010000
  IntOp $R5 $R1 & 0x0000FFFF
  StrCpy $R1 "$R2.$R3.$R4.$R5" 
  
  ; в $R1 - будет инфо о версии!
  ; дальше можно выполнить код с использованием $R1 , пример ниже
  
  IfFileExists "$INSTDIR\XXX.exe" 0 +3
  MessageBox MB_YESNO|MB_ICONEXCLAMATION "У вас уже установлена программа - ${APP_NAME} ${VERSION} \
  $\nВы хотите удалить предыдущую версию  ${APP_NAME} $R1" IDNO +3
  IfFileExists "$INSTDIR\unins000.exe" 0 +3
  ExecWait '"$INSTDIR\unins000.exe" /S _?=$INSTDIR' # удаление старой версии для InnoSetup инсталлятора!
  GoTo noNext
  
; Ваш дальнейший код!  

 noNext:
Если исполняемый или DLL файл не содержит номера версии, поищите где он в файлах указан и прочтите его.


Чтобы убить файл или процесс, следует подходить творчески, прежде всего надо узнать какая сволочь его держит и потом выбрать решение.
Лучше всего узнать класс и придушить его, но для этого нужен отдельный софт

Пример, как по хамски придушить
Код: Выделить весь код
ReserveFile "${NSISDIR}\Plugins\KillProcDLL.dll"

;----------------!

KillProcDLL::KillProc "explorer.exe" ; только в крайнем случае!
Убить запущенный процесс
Код: Выделить весь код
;Ваше определения!
 !define Unclose_1 "XXX.exe" ;- имя запущенного процесса!
;----------------!
ReserveFile "${NSISDIR}\Plugins\KillProc.dll"
;----------------! 

  return_1:
  StrCpy $0 "${Unclose_1}"
  KillProc::FindProcesses
  StrCmp $1 "-1" wooops_1
  StrCmp $0 "0" completed_1
 Sleep 1500
MessageBox MB_ICONQUESTION|MB_YESNOCANCEL "У Вас в Трее всё ещё запущен ${Unclose_1} $\nЗавершить этот процесс сейчас?" IDYES +4 IDCANCEL +2
MessageBox MB_ICONINFORMATION|MB_OKCANCEL "Для продолжения деинстоляции следует выбрать 'Да'" IDOK +2
  Abort
  Goto return_1
  StrCpy $0 "${Unclose_1}"
  KillProc::KillProcesses
  StrCmp $1 "-1" wooops_1
  Goto completed_1
  wooops_1:
  Abort
  completed_1:
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:13, 20-05-2011 | #1192


Аватара для Valdise

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


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

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


sawe

Признателен за ответ
Я не программист, поэтому пока стараюсь переварить и попробую на скрипте NSIS
С Вашего позволения если что не допру письну в ПМ ?

Отправлено: 20:30, 21-05-2011 | #1193


Аватара для wolkow70

Ветеран


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

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


Уважаемый kotkovets,

Воспользовался вашими рекомендациями по созданию генератора ответов. Собрал сборку.
Проблема вот в чем:

Формирую такой файл ответов:

[DIRECTORY]
ISTALLDIR=E:\Program Files\JetAudio
[Sections]
StartMenu=1
Desktop=1
QuickLaunch=1
AU=1
AMS=1
AMF=1
AIF=1
AIFF=1
AAC=1
AC3=1
APE=1
DTS=1
DMF=1
DBM=1
FLAC=1
F4A=1
FAR=1
IT=1
IMS=1
KAR=1
M4A=1
M4B=1
M4R=1
MID=1
MIDI=1
MKA=1
MP+=1
MP2=1
MP3=1
MPC=1
MPP=1
MTM=1
MT2=1
MOD=1
MED=1
MDL=1
M3U=1
M3U8=1
OFR=1
OFS=1
OGA=1
OGG=1
OKT=1
PLS=1
RA=1
PTM=1
RMI=1
SPX=1
SND=1
S3M=1
TAK=1
TTA=1
UMX=1
ULT=1
W64=1
WAV=1
WMA=1
WV=1
XM=1
669=1
Context=1

Программу ставлю в тихом режиме /S
Сама программа ставится нормально.
Секции :
StartMenu=1
Desktop=1
QuickLaunch=1
нормально отрабатывают, а вот файловые ассоциации не производятся. Хотя в ручном режиме проблем нет.

Секции для типов файлов однотипные :

Section "MP3" MP3
SectionIn 2 3 4
${GetSecWriteSucces} MP3
${If} $SUCCES_SECTION = 1
WriteRegStr HKCU "Software\Classes\.MP3" "" "jetAudio.ASSOC.Audio"
${EndIf}
SectionEnd


Для ярлыков примерно также, но работает. В чем дело не пойму...

Section "Ярлык на Рабочем столе" Desktop
SectionIn 1 2 3 4
${GetSecWriteSucces} Desktop
${If} $SUCCES_SECTION = 1
SetOutPath "$INSTDIR"
CreateShortCut "$Desktop\JetAudio.lnk" "$INSTDIR\JetAudio.exe"
${EndIf}
SectionEnd

Может подскажите в чем может быть дело?

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


Последний раз редактировалось wolkow70, 24-05-2011 в 12:27.


Отправлено: 12:06, 24-05-2011 | #1194


Аватара для kotkovets

Ветеран


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

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


Попробуйте так, если сообщение появится, значит секция отрабатывает, либо проблема в
SectionIn 2 3 4 - вероятно получается по умолчанию не отмечена секция, т.е расставьте флаги так, что бы эта секция была по умолчанию отмечена.
Цитата wolkow70:
Section "MP3" MP3а
SectionIn 2 3 4
${GetSecWriteSucces} MP3
${If} $SUCCES_SECTION = 1
/*WriteRegStr HKCU "Software\Classes\.MP3" "" "jetAudio.ASSOC.Audio"*/
MessageBox MB_ICONINFORMATION|MB_OK "sec: MP3"
${EndIf}
SectionEnd »

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


Отправлено: 12:53, 24-05-2011 | #1195


Аватара для wolkow70

Ветеран


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

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


Нет, сообщение не появлялось, зато появлялись сообщения из работающих секций ярлыков. Отсюда вывод: проблема была во флагах.
Попробовал везде выставить 1 2 3 4, и все нормально заработало.
Не понятно почему флаги на это влияют, ведь файл ответов я создаю в ручную, и сам выставляю галочки в чекбоксах?
Можно ли в тихом режиме подавить значение этих флагов, потому, что я хочу по умолчанию, наоборот, без ассоциаций?
И еще проблема, во время создания файла ответов, идет распаковка файлов в директорию. Можно ли сделать только эмуляцию?

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


Отправлено: 14:24, 24-05-2011 | #1196


Аватара для kotkovets

Ветеран


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

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


Цитата wolkow70:
Не понятно почему флаги на это влияют, ведь файл ответов я создаю в ручную, и сам выставляю галочки в чекбоксах? »
А че тут не понятного, флаги отметки влияют на выполнение определенных секций(снимают или выставляют отметки на чебоксах), а макрос только в отмеченной секции работает, если секция не выбрана по умолчанию в режиме установки - результат ясен, код в секции не выполняется.
Отсюда вывод: принудительно в тихом режиме, командами устанавливать все
секции в отмеченное состояние - далее читается файл конфигурации и от его ответов зависит, что ставить, а что нет.
Цитата wolkow70:
И еще проблема, во время создания файла ответов, идет распаковка файлов в директорию. Можно ли сделать только эмуляцию? »
а это ваша проблема в скрипте, ИМХО

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

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

Отправлено: 15:46, 24-05-2011 | #1197

yyv yyv вне форума

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


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

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


здраствуйте.
Нужна опять ваша помощь
Интересует страница лицензии.
используеться
!insertmacro MUI_PAGE_LICENSE "nsis/license.txt"
Воопрос собственно в чем.
сейчас дя создания страницы лицензии файл license.txt должен уже существовать локально, до процесса компиляции.
мне же требуется что бы строка была типа такой
!insertmacro MUI_PAGE_LICENSE "$PLUGINSDIR/license.txt"
или
!insertmacro MUI_PAGE_LICENSE "$TEMP/license.txt"
Те что бы файл лицензии подтягивался уже на стороне пользователя.

На сколько это реально осуществить?

PS сам спросил сам отвечу, вдруг кому надо будет.

есть плагин который это позволяет сделать
http://nsis.sourceforge.net/CustomLicense_plug-in
в ветке обсуждения плагина также приводят пример
http://nsis.sourceforge.net/External_License_file
Работают оба варианта.

Последний раз редактировалось yyv, 24-05-2011 в 16:32.

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

Отправлено: 15:55, 24-05-2011 | #1198


Аватара для wolkow70

Ветеран


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

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


Понял, что моя ошибка заключалась в том, что я по умолчанию поставил "минимальный" тип установки. Переделал на "полный" тип, и все с ассоциациями наладилось.

Цитата kotkovets:
И еще проблема, во время создания файла ответов, идет распаковка файлов в директорию. Можно ли сделать только эмуляцию? »
а это ваша проблема в скрипте, ИМХО »
А вот тут не разберусь, у меня так:

Section "!${PRODUCT_NAME}" Install
SectionIn 1 2 3 4 RO
${If} $GMODE = 0
${AndIf} ${Silent}
${AndIf} ${FileExists} "$INIFILE"
ClearErrors
ReadINIStr "$R0" "$INIFILE" "DIRECTORY" "ISTALLDIR"
${WordReplace} $R0 "%programfiles%" "$PROGRAMFILES" "+" $R1
${WordReplace} $R1 "%windir%" "$WINDIR" "+" $R0
${WordReplace} $R0 "%appdata%" "$APPDATA" "+" $R1
${WordReplace} $R1 "%systemdrive%" "$SysDrive" "+" $R0
StrCpy $INSTDIR $R0
${EndIf}
SetOutPath "$INSTDIR"
File "${pkgdir}\JetAudio\_fileext.dll"
File "${pkgdir}\JetAudio\_fileext.RUS"
File "${pkgdir}\JetAudio\_fileext2.dll"

и далее как всегда...

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


Отправлено: 17:21, 24-05-2011 | #1199


Аватара для wolkow70

Ветеран


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

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


kotkovets

В общем, что получается?..
Выполняются все комманды в секции "!${PRODUCT_NAME}" после ${EndIf} и до конца секции, в том числе:
1. Копируются файлы;
2. Регистрируются dll;
3. Вносятся записи в реестр...

Посмотрел в скрипте AIMP, там так:

StrCpy $INSTDIR $R0
NotSilent:
SetOutPath "$INSTDIR\"

то есть у них вместо EndIf используется NotSilent: Но при этом у них макрос несколько иной...

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


Отправлено: 19:44, 24-05-2011 | #1200



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив].: NSIS - все вопросы :.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Мультимедиа - WinAmp .:[ обсуждение всех версий ]:. ssaram Программное обеспечение Windows 406 12-02-2022 19:45
WinstyleMonitor .:[все вопросы]:. Mr dUSHA Проект WinStyle 331 12-02-2014 13:15
Delphi - Delphi .: [все вопросы] :. Serega Программирование и базы данных 94 04-05-2013 18:45
Доступ - Никак не удаляются файлы (AVI и все остальные форматы) .:[все вопросы]:. Microsoft Windows 2000/XP 105 30-06-2010 11:58
Вопросы по создателю инсталляций NSIS MaxDELETE Программное обеспечение Windows 14 04-07-2007 10:01




 
Переход