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

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


Цитата Serg866:
как на созданной странице сделать кликабельную ссылку (без всяких плагинов типа Linker). »
Код: Выделить весь код
${NSD_CreateLink} 0u 0u 100% 10u "Ссылка"	
Pop $0
${NSD_OnClick} $0 onClickLink
Код: Выделить весь код
Function onClickLink
    ExecShell "open" "http://forum.oszone.net/" 
FunctionEnd

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

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

Отправлено: 13:04, 29-08-2015 | #1801



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

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


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

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


Contributor


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

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


Интересно, сколько бы я мог написать подобных "программ" на NSIS...
Ждём программку удаления файлов

Никто, кстати, не качал поделки автора данных постов? Троянчиков в архивах нет у него случайно?

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


Отправлено: 19:51, 31-08-2015 | #1802


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


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

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


Какая трудолюбивая программа!
Копирует что-то, даже если ничего не добавлять


Отправлено: 22:50, 31-08-2015 | #1803


Аватара для Sancho5555

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


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

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


Вложения
Тип файла: rar Test.rar
(49.3 Kb, 3 просмотров)

Нужен совет. Хочу сделать смену иконки на выделенном объекте.
При таком коде (Хедер SetCursor.nsh) наблюдается мерцание курсора:
Скрытый текст
Код: Выделить весь код
!define OCR_NORMAL      32512
!define OCR_IBEAM       32513
!define OCR_WAIT        32514
!define OCR_CROSS       32515
!define OCR_UP          32516
!define OCR_SIZENWSE    32642
!define OCR_SIZENESW    32643
!define OCR_SIZEWE      32644
!define OCR_SIZENS      32645
!define OCR_SIZEALL     32646
!define OCR_NO          32648
!define OCR_HAND        32649
!define OCR_APPSTARTING 32650

!define SetSystemCursor `!insertmacro SetSystemCursor`
!macro SetSystemCursor Cursor	
System::Call USER32::LoadCursor(i,i${${Cursor}})i.s
System::Call USER32::SetCursor(is)	
!macroend

!define SetFileCursor `!insertmacro SetFileCursor`
!macro SetFileCursor File
System::Call USER32::LoadCursorFromFile(t"${File}")i.s
System::Call USER32::SetCursor(is)
!macroend

А при таком:
Скрытый текст
Код: Выделить весь код
!define OCR_NORMAL      32512
!define OCR_IBEAM       32513
!define OCR_WAIT        32514
!define OCR_CROSS       32515
!define OCR_UP          32516
!define OCR_SIZENWSE    32642
!define OCR_SIZENESW    32643
!define OCR_SIZEWE      32644
!define OCR_SIZENS      32645
!define OCR_SIZEALL     32646
!define OCR_NO          32648
!define OCR_HAND        32649
!define OCR_APPSTARTING 32650

!macro SetCursor
 System::Call user32::SetClassLong(i${Msg},i-12,ir0) 
!macroend

!define SetSystemCursor `!insertmacro SetSystemCursor`
!macro SetSystemCursor Msg Cursor
 System::Call `user32::LoadImage(i0, i ${${Cursor}}, i ${IMAGE_CURSOR}, i 0, i 0, i ${LR_SHARED}) i.r0`
 Push ${Msg}
 !insertmacro SetCursor
!macroend

!define SetFileCursor `!insertmacro SetFileCursor`
!macro SetFileCursor Msg File
 System::Call `user32::LoadImage(i0, t "${File}", i ${IMAGE_CURSOR}, i 0, i 0, i ${LR_LOADFROMFILE}) i.r0`
 Push ${Msg}
 !insertmacro SetCursor
!macroend

происходит применение курсора на все объекты одного класса. Например на кнопку или BMP картинку.
Вот сам код:
Скрытый текст
Код: Выделить весь код
Name "Test"
OutFile "test.exe"

!include MUI2.nsh
!include SetCursor.nsh
!insertmacro MUI_LANGUAGE Russian

Var hCtl
Var Button1
Var Button2
Var Bitmap1
Var Bitmap1_hImage
Var Label1

Page custom Create

Function Create
  
  nsDialogs::Create 1044
  Pop $hCtl
  ${If} $hCtl == error
    Abort
  ${EndIf}
  ${SetSystemCursor} $hCtl OCR_NO
	
	
  ${NSD_CreateButton} 82u 46u 49u 14u "1"
  Pop $Button1
  ${SetSystemCursor} $Button1 OCR_HAND
	
  ${NSD_CreateButton} 180u 46u 49u 14u "2"
  Pop $Button2
	
  ${NSD_CreateLabel} 113u 84u 65u 14u "Проверка"
  Pop $Label1
  
  ${NSD_CreateBitmap} 7u 7u 57u 53u ""
  Pop $Bitmap1
  File "/oname=$PLUGINSDIR\3.bmp" "3.bmp"
  ${NSD_SetImage} $Bitmap1 "$PLUGINSDIR\3.bmp" $Bitmap1_hImage
  ${SetFileCursor} $Bitmap1 `$EXEDIR\cursor1.cur`
	
  nsDialogs::Show $hCtl
FunctionEnd

Section
SectionEnd

Последний раз редактировалось Sancho5555, 01-09-2015 в 05:58.


Отправлено: 03:49, 01-09-2015 | #1804


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

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


Contributor


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

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


Цитата Kopejkin:
Какая трудолюбивая программа!
Копирует что-то, даже если ничего не добавлять »
Такая трудолюбивая, что искусственно себе "перерывы на чай" делает:
Код: Выделить весь код
  MessageBox MB_YESNO|MB_USERICON $(LSTR_56) IDYES label_1919 IDNO label_1925    ;  "The files ($3) already exists.$\n$\nClick $\"Yes$\" and rename the files of (Backup.$3).$\n$\nClick $\"No$\" and delete the files ($3)"
label_1919:
  Rename $_26_\$3 $_26_\Backup.$3 ;  $_26_\$3->$_26_\Backup.$3
  ShowWindow $_21_ ${SW_HIDE}
  SendMessage $_21_ ${WM_SETTEXT} 0 "STR:- $_38_ - $(LSTR_57)"    ;  "Renamed successfully"
  SetCtlColors $_21_ 0x32CD32 transparent
  ShowWindow $_21_ ${SW_SHOW}
  Sleep 1000
label_1925:
  Delete $_26_\$3
  ShowWindow $_21_ ${SW_HIDE}
  SendMessage $_21_ ${WM_SETTEXT} 0 "STR:- $_38_ - $(LSTR_58)"    ;  "Successfully removed"
  SetCtlColors $_21_ 0x32CD32 transparent
  ShowWindow $_21_ ${SW_SHOW}
  Sleep 1000
  Goto label_1933
label_1932:
  StrCmp $0 0 0 label_1933
label_1933:
  ShowWindow $_21_ ${SW_HIDE}
  SendMessage $_21_ ${WM_SETTEXT} 0 "STR:- $(LSTR_59)"    ;  "Copied $_38_. Please wait..."
  SetCtlColors $_21_ 0x32CD32 transparent
  ShowWindow $_21_ ${SW_SHOW}
  Banner::show /NOUNLOAD /set 76 $(LSTR_59) $(LSTR_60)    ;  "Copied $_38_. Please wait..." "Please wait..."
    ; Call Initialize_____Plugins
    ; File $PLUGINSDIR\Banner.dll
    ; SetDetailsPrint lastused
    ; Push $(LSTR_60)    ;  "Please wait..."
    ; Push $(LSTR_59)    ;  "Copied $_38_. Please wait..."
    ; Push 76
    ; Push /set
    ; CallInstDLL $PLUGINSDIR\Banner.dll /NOUNLOAD show
  ClearErrors
  SetOutPath $_26_
  CopyFiles /SILENT $_29_ $_26_    ; $(LSTR_7)$_26_    ;  "Copy to "
  Banner::destroy
Особенно забавно в его коде смотрится картина с меткой label_1933

Цитата Sancho5555:
наблюдается мерцание курсора: »
Тёмный лес с этим курсором в NSIS, как мы недавно здесь выяснили с MKN, спроси у него, может он чего добился (буквально страницу-две назад с этой проблемой воевали)

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


Отправлено: 03:55, 01-09-2015 | #1805


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


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

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


K.A.V.
приветствую
ещё такой вопрос возник - как скрыть содержимое инсталлятора от глаз архиваторов, в частности 7zip? Тут уже этот вопрос поднимался, но решения не нашли толкового, кто-то писал что можно это сделать средствами непосредственно НСИС, но способ не показал. Также программу какую-то выкладывали, но как-то не доверяю я таким программам. они неизвестно что вшивают в установщик.

Алгоритм сжатия LZMA Solid использую

Отправлено: 13:47, 01-09-2015 | #1806


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

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


Contributor


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

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


Цитата Serg866:
ещё такой вопрос возник - как скрыть содержимое инсталлятора от глаз архиваторов, в частности 7zip? Тут уже этот вопрос поднимался, но решения не нашли толкового, кто-то писал что можно это сделать средствами непосредственно НСИС, но способ не показал »
http://nsis.sourceforge.net/Can_I_de...ting_installer
Отвечу вам тоже самое, что отвечаю на такие вопросы в личке.

Я ранее сильно не заморачивался этим вопросом и первое, на что наткнулся - http://samforum.org/showthread.php?t=30452
Это и использовал в своём SFX Creator, но потом отказался по причине, которая описана мной в той теме
Вроде как ссылаются на плагин DcryptDll для защиты файлов в инсталляторе, но опять же - лично сам ничего не пробовал, примерчики там вроде есть, как и в составе любого плагина...

Цитата Serg866:
они неизвестно что вшивают в установщик. »
Насчет Xexecute Hide - она только меняет парочку байт и всё (ничего не вшивает "левого"), но у неё есть проблема, описанная мной в теме на форуме samforum, насчет других программ ничего не скажу, не знаю о других

Насчет "средствами NSIS" - способ описан на страничке "Can I decompile an existing installer?" по первой ссылке.
Я добился такого эффекта (запрет на просмотр содержимого архиваторами) своей сборкой NSIS и буду использовать её в новой версии SFX Creator, выкладывать эту сборку я не буду по причине того, что она будет частью SFX Creator, у кого есть сильное желание - копайтесь в исходниках NSIS и добьётесь того, что вам нужно.

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


Отправлено: 14:59, 01-09-2015 | #1807


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


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

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


K.A.V.
спасибо.
Ну то что программуля крошит деинсталлятор не так страшно, достаточно деинсталлятор создать заранее и включить в дистрибутив программы наравне с другими файлами.
А вот то что она требует отключения CRC мне что-то не нравится, получается кто-то может что-то поменять внутри установщика и он запустится как родной.
Второй способ я не понял, сложновато для новичка типа меня.
------
И ещё возвращаясь к своему вопросу про добавление ссылки на созданной странице,
Ваш пример скрипта сработал! Благодарю.
Но решил обновить НСИС до последней версии и цвет ссылки почему-то такой стал:

в предыдущих версия был тёмно-синий, а сейчас побледнел.
Можно ли поменять этот цвет?

Последний раз редактировалось Serg866, 01-09-2015 в 15:21.


Отправлено: 15:15, 01-09-2015 | #1808

MKN MKN вне форума

Ветеран


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

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


Цитата Serg866:
Можно ли поменять этот цвет? »
цвет, фон, шрифт...
Код: Выделить весь код
${NSD_CreateLink} 16u 15u 100u 30u " oszone.net "
Pop $1
CreateFont $2 "Arial" 18
SendMessage $1 ${WM_SETFONT} $2 0
SetCtlColors $1 0xff5500 0xffff00
;или
;SetCtlColors $1 0xff5500 transparent
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:23, 01-09-2015 | #1809

MKN MKN вне форума

Ветеран


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

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


Интересно, возможно ли убрать рамку-окантовку вокруг текста, которая появляется при клике на линке ?

Отправлено: 17:35, 01-09-2015 | #1810



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




 
Переход