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

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

 

Аватара для kotkovets

Ветеран


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

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


Цитата vahe-91:
Моя интуиция подсказывает, что эти две, правильно ? »
альтернативы не существует

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


Отправлено: 19:53, 09-11-2013 | #741



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

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

MKN MKN вне форума

Ветеран


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

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


Цитата vahe-91:
как-то можно сгенерировать случайное число ? »
http://nsis.sourceforge.net/NsRandom_plug-in
http://nsis.sourceforge.net/Rnd
http://nsis.sourceforge.net/Random

А также:
Код: Выделить весь код
System::Call kernel32::GetTickCount()i.r1
IntOp $1 $1 % 10
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:44, 10-11-2013 | #742


Аватара для Mafia_forever

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


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

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


Всем привет , у меня есть вопрос ! Можно ли разбить на тома инсталлятор как в Inno Setup ?

Отправлено: 13:40, 10-11-2013 | #743


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


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

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


Делаю патчер с проверкой MD5 файла. При каких-либо отличиях выводятся свои сообщения. При наличии измененного этим патчем файла (сооб.1) и при несоответствии оригинального файла (сооб.2). Возврат к поиску другой папки после Сооб.2 оправдан. А вот после Сооб.1 приходится выполнять лишнее действие. Даже два, так как приходится щелкать еще и в окне запроса подтверждения отмены установки.
Можно ли закрыть программу инсталляции сразу после вывода сообщения 1, а не возвращаться для отдельной отмены установки?
Код: Выделить весь код
    
    !include "MUI2.nsh"        
    !include "VPatchLib.nsh"  
    !include "Logiclib.nsh"   
    !include "ProcessFunc.nsh"
SetCompressor /SOLID lzma

    !define PRODUCT_NAME "Screenshot Captor"  
    !define PRODUCT_VERSION "4.7.2"           
    !define pkgdir "d:\pr_ScreenshotCaptor.472"
    !define BRANDING "©KOPEJKIN, 10/2013"     
    !define MUI_ABORTWARNING                  
    !define MUI_ABORTWARNING_TEXT "Отменить установку русификатора ${PRODUCT_NAME} ${PRODUCT_VERSION}?"
    !define MUI_WELCOMEFINISHPAGE_BITMAP "${pkgdir}\res\logo.bmp"
    !define MUI_HEADERIMAGE
    !define MUI_HEADERIMAGE_BITMAP "${pkgdir}\res\top_rus_inst_r.bmp"
    !define MUI_HEADERIMAGE_RIGHT
    !insertmacro MUI_PAGE_LICENSE "lic_rus.rtf"
    !define MUI_PAGE_HEADER_TEXT "Информация"
    !define MUI_LICENSEPAGE_TEXT_BOTTOM " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "
    !define MUI_LICENSEPAGE_BUTTON "Далее"  
    !insertmacro MUI_PAGE_LICENSE "ug_rus.rtf"
    !define MUI_PAGE_CUSTOMFUNCTION_LEAVE Check
    !insertmacro MUI_PAGE_DIRECTORY
    !insertmacro MUI_PAGE_INSTFILES
    !insertmacro MUI_PAGE_FINISH
    !insertmacro MUI_LANGUAGE "Russian"


   Caption "Русификация ${PRODUCT_NAME} ${PRODUCT_VERSION}"           
   Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"    
   BrandingText "${BRANDING}"                   
   InstallDir "" 
   OutFile "sc472rus.kopejkin.exe"     
   RequestExecutionLevel admin
   ShowInstDetails show      
   ShowUninstDetails show    

Section "-Русификатор"
  SetOutPath $INSTDIR
    CreateDirectory "$INSTDIR\Backup"
      CopyFiles /SILENT $INSTDIR\ScreenshotCaptor.exe $INSTDIR\Backup\ScreenshotCaptor.exe.bak
  DetailPrint "Подготовка к изменению файла ScreenshotCaptor.exe..."
  !insertmacro VPatchFile "sc472rus.pat" "$INSTDIR\ScreenshotCaptor.exe" "$INSTDIR\temporaryfile.exe"
SectionEnd

Function .OnInit
       ${KillProcess} "ScreenshotCaptor.exe" $0
FunctionEnd

Function .onVerifyInstDir
       IfFileExists "$INSTDIR\ScreenshotCaptor.exe" PathGood
       Abort
       PathGood:
FunctionEnd

Function Check
       StrCpy $0 "$INSTDIR\ScreenshotCaptor.exe"
       md5dll::GetMD5File "$0"
       Pop $1
       StrCpy $R1 $1                           

    ${If} $R1 == 2422E63F23D86C754C5CB9606196D036                    
    ${ElseIf} $R1 == 5755a1c31f67191f0fbcaa9548c48e8e                
       MessageBox MB_OK|MB_DEFBUTTON2|MB_ICONINFORMATION  "\
                                                 РУССКАЯ версия УЖЕ установлена на этом компьютере.$\n$\n\
                                                 Нажмите кнопку 'OK' для закрытия этого сообщения$\n\
                                                 и ОТМЕНИТЕ установку данного русификатора." IDOK
       
     Quit       ; Здесь применяем команду Quit, а не Abort. Тогда после нажатия кнопки ОК программа установки будет закрыта .
    ${Else} 
       MessageBox MB_OK|MB_ICONSTOP| "Здесь - ($INSTDIR),$\n\
                                                 находится файл программы, для изменения которого$\n\
                                                 данный русификатор НЕ ПРЕДНАЗНАЧЕН!$\n$\n\
                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$\n\
                                                 Возможные причины: $\n\
                                                 - выбрана неверная папка ${PRODUCT_NAME} ${PRODUCT_VERSION};$\n\
                                                 - программа ${PRODUCT_NAME} ${PRODUCT_VERSION} не установлена;$\n\
                                                 - попытка локализовать ${PRODUCT_NAME} другой версии;$\n\
                                                 - попытка локализовать измененный оригинальный файл.$\n$\n\
                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$\n$\n\
                                                 Нажмите 'OK' для выбора другой папки или ОТМЕНЫ установки." IDOK
       Abort  
    ${EndIf}
FunctionEnd
Спасибо, kotkovets! Исправил в коде, может еще кому пригодится.

Последний раз редактировалось Kopejkin, 11-11-2013 в 13:55.


Отправлено: 13:42, 10-11-2013 | #744


Аватара для kotkovets

Ветеран


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

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


Цитата Kopejkin:
Можно ли закрыть программу инсталляции сразу после вывода сообщения 1, а не возвращаться для отдельной отмены установки? »
прописать команду закрытия приложения: quit вместо прерывания аbort

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


Последний раз редактировалось kotkovets, 10-11-2013 в 15:44.

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

Отправлено: 15:36, 10-11-2013 | #745

MKN MKN вне форума

Ветеран


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

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


Возможно ли в NSIS реализовать мониторинг создания ключей реестра, какой либо программой ?
Т.е. перехват обращений к реестру. Вроде как для этого есть функция CmRegisterCallback...
Вскользь про это было здесь : http://www.xakep.ru/magazine/xa/102/114/1.asp

Отправлено: 12:44, 11-11-2013 | #746


Аватара для kotkovets

Ветеран


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

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


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

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


Отправлено: 14:24, 11-11-2013 | #747

MKN MKN вне форума

Ветеран


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

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


Цитата kotkovets:
А нужно ли это установщику? »
Появляется всё больше программ, "генерирующих" различные уникальные и не очень, ключи и данные в реестр (часто только при первом запуске ! ), которые после деинсталляции, как штатной, (так и организованной разработчиком NSIS дистрибутива) - не удаляются из реестра.
То что эти ключи и данные остаются в реестре - полбеды. В ряде случаев именно из-за их наличия, не возможно повторно установить программу, либо программа просто не станет работать...
Поэтому полная зачистка реестра от этой заразы, как перед установкой, так и при деинсталляции ПО, была бы очень полезна. Поэтому есть смысл мониторить образование таких ключей
Цитата kotkovets:
если кто-то напишет драйвер для NSIS.»
Понятно, т.е. - этого не будет никогда...

Отправлено: 14:40, 11-11-2013 | #748

MKN MKN вне форума

Ветеран


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

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


Когда то рассматривался вопрос об использовании в качестве картинок - файлов формата Jpg
Есть код, позволяющий использовать Jpg и Gif файлы, а также изменять их размер :
Код: Выделить весь код
!include MUI2.nsh
Page Custom mypage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
OutFile "Jpg-Resize-test.exe"

; Ссылка на идентификатор интерфейса, описывающий тип указателя интерфейса для возврата в ppvRet.
!ifndef IID_IPicture
    !define IID_IPicture {7BF80980-BF32-101A-8BBB-00AA00300CAB}
!endif
!define SRCCOPY 0xCC0020
!define IMAGEPATH "$EXEDIR\Pict.jpg" ;
!define NEWSIZEW 300
!define NEWSIZEH 200

Function mypage
nsDialogs::Create 1044
Pop $0
System::Call 'oleaut32::OleLoadPicturePath(w "${IMAGEPATH}",i0r2,i0,i0,g"${IID_IPicture}",*i.r9)i.r1'
${If} $1 = 0
    System::Call 'user32::GetDC(i0)i.s'
    System::Call 'gdi32::CreateCompatibleDC(iss)i.r1'
    System::Call 'gdi32::CreateCompatibleBitmap(iss,i${NEWSIZEW},i${NEWSIZEH})i.r2'
    System::Call 'user32::ReleaseDC(i0,is)'
    System::Call $9->3(*i.r3)i.r4 ; IPicture->get_Handle
    ${If} $4 = 0
        System::Call 'gdi32::SetStretchBltMode(ir1,i4)'
        System::Call '*(&i40,&i1024)i.r4' ; BITMAP / BITMAPINFO
        System::Call 'gdi32::GetObject(ir3,i24,ir4)'
        System::Call 'gdi32::SelectObject(ir1,ir2)i.s'
        System::Call '*$4(i40,i.r6,i.r7,i0,i,i.s)' ; Grab size and bits-ptr AND init as BITMAPINFOHEADER
        System::Call 'gdi32::GetDIBits(ir1,ir3,i0,i0,i0,ir4,i0)' ; init BITMAPINFOHEADER
        System::Call 'gdi32::GetDIBits(ir1,ir3,i0,i0,i0,ir4,i0)' ; init BITMAPINFO
        System::Call 'gdi32::StretchDIBits(ir1,i0,i0,i${NEWSIZEW},i${NEWSIZEH},i0,i0,ir6,ir7,is,ir4,i0,i${SRCCOPY})'
        System::Call 'gdi32::SelectObject(ir1,is)'
        System::Free $4
    ${EndIf}
    System::Call 'gdi32::DeleteDC(ir1)'
    System::Call $9->2() ; IPicture->release()
${EndIf}
${NSD_CreateBitmap} 1u 1u ${NEWSIZEW} ${NEWSIZEH} ""
Pop $9
;Not required when the control size matches: ${NSD_AddStyle} $9 ${SS_CENTERIMAGE}
SendMessage $9 ${STM_SETIMAGE} ${IMAGE_BITMAP} $2
nsDialogs::Show
System::Call 'gdi32::DeleteObject(ir2)'
FunctionEnd

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

Отправлено: 13:37, 12-11-2013 | #749

MKN MKN вне форума

Ветеран


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

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


При создании на стандартной финишной странице отмеченного чекбокса ( MUI_FINISHPAGE_RUN ), для запуска после установки (т.е. после закрытия PAGE_FINISH) чего либо ,
чтобы этого запуска не было, сначала надо снять отметку с чекбокса, а потом кликнуть Finish.
Иногда это не преемлемо и мешает управлению событиями...
Но на FINISHPAGE можно активировать кнопку "Cancel", нажатие которой, закроет страницу без запуска чего либо, даже если чекбокс отмечен.

Код: Выделить весь код
OutFile "FinishCancelEnabled_test.exe"
!include MUI2.nsh
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
#Do NOT use MUI_FINISHPAGE_CANCEL_ENABLED  !
!define MUI_FINISHPAGE_RUN "$windir\explorer.exe"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW CancelEnabled
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"

!ifndef SC_CLOSE
!define SC_CLOSE 0xF060
!endif

Function CancelEnabled
EnableWindow $mui.Button.Cancel 1
System::Call 'USER32::GetSystemMenu(i $hwndparent,i0)i.s'
System::Call 'USER32::EnableMenuItem(is,i${SC_CLOSE},i0)'
FunctionEnd 

Section
SectionEnd

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


Отправлено: 11:38, 13-11-2013 | #750



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




 
Переход