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

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

 

Аватара для AlekseyPopovv

Старожил


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

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


iglezz,
Ага, въехал...

А как сделать что бы инсталлятор нельзя было открыть в 7z?
Можно в личку.

Последний раз редактировалось AlekseyPopovv, 01-10-2019 в 11:37.


Отправлено: 11:28, 01-10-2019 | #2321



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

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


Аватара для AlekseyPopovv

Старожил


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

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


Как создать MUI_PAGE_DIRECTORY custom?
И как задать разные InstallDir для обычной и портативной версий?

Отправлено: 17:59, 04-10-2019 | #2322


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

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


Contributor


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

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


Цитата AlekseyPopovv:
Как создать MUI_PAGE_DIRECTORY custom? »
Справочник по NSIS => Описания плагинов => nsDialogs: Создаем собственные страницы инсталлятора

Цитата AlekseyPopovv:
И как задать разные InstallDir для обычной и портативной версий? »
InstallDir можно переназначить в любой момент назначением переменной $INSTDIR путь нужного каталога, меняйте значение этой переменной в том участке кода, где пользователь делает выбор: обычная или портативная

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


Отправлено: 18:20, 04-10-2019 | #2323


Аватара для AlekseyPopovv

Старожил


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

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


Цитата K.A.V.:
в любой момент назначением переменной $INSTDIR »
А как быть с выбором папки на MUI_PAGE_DIRECTORY? По умолчанию обычная и портативная предлагают установку в $PROGRAMFILES\${APP} (InstallDir "$PROGRAMFILES\${APP}"), а хотелось бы портативную в $EXEDIR\${APP} Portable.

Отправлено: 18:42, 04-10-2019 | #2324


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

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


Contributor


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

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


Цитата AlekseyPopovv:
А как быть с выбором папки на MUI_PAGE_DIRECTORY? По умолчанию обычная и портативная предлагают установку в $PROGRAMFILES\${APP} (InstallDir "$PROGRAMFILES\${APP}"), а хотелось бы портативную в $EXEDIR\${APP} Portable. »
Так вы дайте больше инфы или кусок своего кода, чтобы мы конкретно подсказали, какие команды вам использовать в коде или, может, сами пример накидаем, сейчас мы в угадайку будем так играть с вами, я же не знаю, как вы пользователю предлагаете сделать выбор:
1) Показать диалог с взаимоисключаемыми секциями
2) На собственной созданной страничке поставили 2 радиобаттона и юзер жмакает тот, который ему нужен (обычная/портативная установки)
3) Или тупо при заапуске показываете мессадж-бокс (сообщение с вопросом "Портативку не желаете?")...
4) Если собственная страничка, то чем создаёте? InstallOptions или nsDialogs?

вот как-то так...Ребята, задавайте более конкретные вопросы или сразу кидайте свой код, задаёте размытые вопросы - размытые ответы и получаете...

небольшой пример со стандартными средствами с взаимоисключаемыми компонентами (некрасиво, старо и не модно, мне лень что-то воротить "впустую")
Код: Выделить весь код
!include "MUI.nsh"
!include "Sections.nsh"
!include "Logiclib.nsh"

!define MUI_COMPONENTSPAGE_SMALLDESC

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_COMPONENTS
Page custom PageCreate
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"


Name "TESTttt"
OutFile "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.exe"
InstallDir "$TEMP"
ShowInstDetails nevershow

Section "Обычная установка" ID_1
SectionEnd

Section /o "Портативная" ID_2
SectionEnd

Function .onSelChange

; Выбор между компонентам 1, 2
  !insertmacro StartRadioButtons $1
    !insertmacro RadioButton ${ID_1}
    !insertmacro RadioButton ${ID_2}
  !insertmacro EndRadioButtons

FunctionEnd

Function .onInit
  StrCpy $1 ${ID_1}
FunctionEnd

Function PageCreate
  SectionGetFlags ${ID_1} $0 ; Получаем флаги секции
  IntOp $0 $0 & ${SF_SELECTED} ; Проверяем, отмеченая ли для установки секция "Обычная установка"
${If} $0 == 1 ; Если $0 = 1, значит секция отмечена для установки
 StrCpy $INSTDIR "$PROGRAMFILES\TEST"
  ${Else}
 StrCpy $INSTDIR "$EXEDIR\TEST"
${EndIf}
FunctionEnd



Section -Post
SectionEnd

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

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

Отправлено: 19:33, 04-10-2019 | #2325


Аватара для AlekseyPopovv

Старожил


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

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


Цитата K.A.V.:
Так вы дайте больше инфы или кусок своего кода »
Код: Выделить весь код
!include "MUI2.nsh"

Page Custom FnCustPage FnRadioCheck
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

Name "Test"
InstallDir "$TEMP"
OutFile "Test.exe"
ShowInstDetails nevershow

Var Dialog
Var Check
Var Check1
Var CheckBox
Var CheckBox1
Var Radio
Var Radio1
Var RadioButton
Var RadioButton1

Function FnCustPage
  nsDialogs::Create 1018
  Pop $Dialog
  
  ${NSD_CreateRadioButton} 5u 10u 124u 12u "1"
  Pop $RadioButton
  ${NSD_SetState} $RadioButton 1
  ${NSD_OnClick} $RadioButton RadioButton
  
  ${NSD_CreateRadioButton} 5u 22u 124u 12u "1"
  Pop $RadioButton1
  ${NSD_OnClick} $RadioButton1 RadioButton1
 
  ${NSD_CreateCheckBox} 5u 60u 124u 12u "2"
  Pop $CheckBox
  ${NSD_SetState} $CheckBox 1
  
  ${NSD_CreateCheckBox} 5u 72u 124u 12u "2"
  Pop $CheckBox1
  ${NSD_SetState} $CheckBox1 1
  nsDialogs::Show
FunctionEnd

Function Switching
  ${NSD_GetState} $RadioButton $Radio
  ${If} $Radio == 1
    EnableWindow $CheckBox 1
    EnableWindow $CheckBox1 1
    ${NSD_SetState} $CheckBox 1
    ${NSD_SetState} $CheckBox1 1
  ${Else}
    EnableWindow $CheckBox 0
    EnableWindow $CheckBox1 0
    ${NSD_SetState} $CheckBox 0
    ${NSD_SetState} $CheckBox1 0
  ${EndIf}
FunctionEnd

Function RadioButton
  Pop $RadioButton
  Call Switching
FunctionEnd

Function RadioButton1
  Pop $RadioButton1
  Call Switching
FunctionEnd

Function FnRadioCheck
  ${NSD_GetState} $RadioButton $Radio
  ${NSD_GetState} $RadioButton1 $Radio1
  ${NSD_GetState} $CheckBox $Check
  ${NSD_GetState} $CheckBox1 $Check1
FunctionEnd

Section
  ${If} $Radio == 1
DetailPrint ""
StrCpy $INSTDIR "$PROGRAMFILES\Install"
  ${EndIf}
SectionEnd

Section
  ${If} $Radio1 == 1
    DetailPrint ""
    StrCpy $INSTDIR "$EXEDIR\Portable"
  ${EndIf}
SectionEnd

Section
  ${If} $Check == 1
    DetailPrint ""
  ${EndIf}
  
  ${If} $Check1 == 1
    DetailPrint ""
  ${EndIf}
SectionEnd
Чего не хватает?

Отправлено: 06:18, 05-10-2019 | #2326


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

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


Contributor


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

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


AlekseyPopovv, отвечу сразу на вопрос, заданный в личке
При нажатии кнопки "Назад" - у вас диалог заново инициализируется с вашими прописанными состояниями элементов
Соответственно, чтобы сделать более умный диалог, нам нужно код написать таким образом, чтобы он учитывал сей факт, что кто-то нажмёт "Назад" и нам будет необходимо поставить всё так, как выставил пользователь
Для этого, нам нужно сначала в секцию .onInit прописать в переменные, состояние элементов управления по-умолчанию:
Код: Выделить весь код
Function .onInit
 StrCpy $Radio 1
 StrCpy $Radio1 0
 StrCpy $Check 1
 StrCpy $Check1 1
FunctionEnd
Затем заменим ваш кусок кода:
Скрытый текст

Код: Выделить весь код
Function FnCustPage
  nsDialogs::Create 1018
  Pop $Dialog
  
  ${NSD_CreateRadioButton} 5u 10u 124u 12u "1"
  Pop $RadioButton
  ${NSD_SetState} $RadioButton 1
  ${NSD_OnClick} $RadioButton RadioButton
  
  ${NSD_CreateRadioButton} 5u 22u 124u 12u "1"
  Pop $RadioButton1
  ${NSD_OnClick} $RadioButton1 RadioButton1
 
  ${NSD_CreateCheckBox} 5u 60u 124u 12u "2"
  Pop $CheckBox
  ${NSD_SetState} $CheckBox 1
  
  ${NSD_CreateCheckBox} 5u 72u 124u 12u "2"
  Pop $CheckBox1
  ${NSD_SetState} $CheckBox1 1
  nsDialogs::Show
FunctionEnd

Этим:
Скрытый текст

Код: Выделить весь код
Function FnCustPage
  nsDialogs::Create 1018
  Pop $Dialog

  ${NSD_CreateRadioButton} 5u 10u 124u 12u "1"
  Pop $RadioButton
  ${NSD_SetState} $RadioButton $Radio ; Используем переменные в значении статуса элемента (отмечен/не отмечен). Начальный статус элемента мы назначили в .onInit
  ${NSD_OnClick} $RadioButton RadioButton

  ${NSD_CreateRadioButton} 5u 22u 124u 12u "1"
  Pop $RadioButton1
  ${NSD_SetState} $RadioButton1 $Radio1 ; Используем переменные в значении статуса элемента (отмечен/не отмечен). Начальный статус элемента мы назначили в .onInit
  ${NSD_OnClick} $RadioButton1 RadioButton1

  ${NSD_CreateCheckBox} 5u 60u 124u 12u "2"
  Pop $CheckBox
  ${NSD_SetState} $CheckBox $Check ; Используем переменные в значении статуса элемента (отмечен/не отмечен). Начальный статус элемента мы назначили в .onInit

  ${NSD_CreateCheckBox} 5u 72u 124u 12u "2"
  Pop $CheckBox1
  ${NSD_SetState} $CheckBox1 $Check1 ; Используем переменные в значении статуса элемента (отмечен/не отмечен). Начальный статус элемента мы назначили в .onInit

  EnableWindow $CheckBox $Radio ; Активируем/деактивируем чекбокс из значения радиобаттона
  EnableWindow $CheckBox1 $Radio ; Активируем/деактивируем чекбокс1 исходя из значения радиобаттона

  nsDialogs::Show
FunctionEnd


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

Далее заменим
Код: Выделить весь код
Function Switching
  ${NSD_GetState} $RadioButton $Radio
  ${If} $Radio == 1
    EnableWindow $CheckBox 1
    EnableWindow $CheckBox1 1
    ${NSD_SetState} $CheckBox 1
    ${NSD_SetState} $CheckBox1 1
  ${Else}
    EnableWindow $CheckBox 0
    EnableWindow $CheckBox1 0
    ${NSD_SetState} $CheckBox 0
    ${NSD_SetState} $CheckBox1 0
  ${EndIf}
FunctionEnd
на
Код: Выделить весь код
Function Switching
  ${NSD_GetState} $RadioButton $Radio  ; Получаем статус радиобаттона
    EnableWindow $CheckBox $Radio ; и используем это значение для активации/деактивации элементов
    EnableWindow $CheckBox1 $Radio ; и используем это значение для активации/деактивации элементов
    ${NSD_SetState} $CheckBox $Radio ; и используем это значение для назначения статуса чекбоксу
    ${NSD_SetState} $CheckBox1 $Radio ; и используем это значение для назначения статуса чекбоксу
FunctionEnd
так мы сделаем код более компактным, функционал остаётся тот же

Теперь о том, чего не хватает
У вас переназначение $INSTDIR прописано в секции, это неправильно, т.к. секции обрабатываются непосредственно при начале установки в
Код: Выделить весь код
!insertmacro MUI_PAGE_INSTFILES
соответственно, нам нужно переназначать $INSTDIR до появления диалога выбора директории установки
Код: Выделить весь код
!insertmacro MUI_PAGE_DIRECTORY
Поэтому можно просто в конец функции FnCustPage прописать то, что нам нужно:
Код: Выделить весь код
${If} $Radio == 1
  StrCpy $INSTDIR "$PROGRAMFILES\Install"
  DetailPrint "Папка установки: $INSTDIR"
${Else}
  StrCpy $INSTDIR "$EXEDIR\Portable"
  DetailPrint "Папка установки: $INSTDIR"
${EndIf}
Не обязательно проверять статус двух взаимоисключающих радиобаттанов, как это у вас прописано:
Код: Выделить весь код
Section
  ${If} $Radio == 1
DetailPrint ""
StrCpy $INSTDIR "$PROGRAMFILES\Install"
  ${EndIf}
SectionEnd

Section
  ${If} $Radio1 == 1
    DetailPrint ""
    StrCpy $INSTDIR "$EXEDIR\Portable"
  ${EndIf}
SectionEnd
Можно сделать проверку по одному, ведь если логически подумать, то если первый радиобаттон не выбран - то выбран второй (при условии, опять же повторюсь, что они взаимоисключающие)
Но это чисто мой стиль написания, я не навязываю вам писать свой код таким же образом, просто так он будет выглядеть менее громоздким...

Готовый вариант вашего кода

Код: Выделить весь код
!include "MUI2.nsh"

Page Custom FnCustPage FnRadioCheck
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

Name "Test"
InstallDir "$TEMP"
OutFile "Test.exe"
ShowInstDetails nevershow

Var Dialog
Var Check
Var Check1
Var CheckBox
Var CheckBox1
Var Radio
Var Radio1
Var RadioButton
Var RadioButton1


Function .onInit
 StrCpy $Radio 1
 StrCpy $Radio1 0
 StrCpy $Check 1
 StrCpy $Check1 1
FunctionEnd


Function FnCustPage
  nsDialogs::Create 1018
  Pop $Dialog

  ${NSD_CreateRadioButton} 5u 10u 124u 12u "1"
  Pop $RadioButton
  ${NSD_SetState} $RadioButton $Radio ; Используем переменные в значении статуса элемента (отмечен/не отмечен). Начальный статус элемента мы назначили в .onInit
  ${NSD_OnClick} $RadioButton RadioButton

  ${NSD_CreateRadioButton} 5u 22u 124u 12u "1"
  Pop $RadioButton1
  ${NSD_SetState} $RadioButton1 $Radio1 ; Используем переменные в значении статуса элемента (отмечен/не отмечен). Начальный статус элемента мы назначили в .onInit
  ${NSD_OnClick} $RadioButton1 RadioButton1

  ${NSD_CreateCheckBox} 5u 60u 124u 12u "2"
  Pop $CheckBox
  ${NSD_SetState} $CheckBox $Check ; Используем переменные в значении статуса элемента (отмечен/не отмечен). Начальный статус элемента мы назначили в .onInit

  ${NSD_CreateCheckBox} 5u 72u 124u 12u "2"
  Pop $CheckBox1
  ${NSD_SetState} $CheckBox1 $Check1 ; Используем переменные в значении статуса элемента (отмечен/не отмечен). Начальный статус элемента мы назначили в .onInit

  EnableWindow $CheckBox $Radio ; Активируем/деактивируем чекбокс из значения радиобаттона
  EnableWindow $CheckBox1 $Radio ; Активируем/деактивируем чекбокс1 исходя из значения радиобаттона

  nsDialogs::Show
  
${If} $Radio == 1
  StrCpy $INSTDIR "$PROGRAMFILES\Install"
  DetailPrint "Папка установки: $INSTDIR"
${Else}
  StrCpy $INSTDIR "$EXEDIR\Portable"
  DetailPrint "Папка установки: $INSTDIR"
${EndIf}
FunctionEnd

Function Switching
  ${NSD_GetState} $RadioButton $Radio  ; Получаем статус радиобаттона
    EnableWindow $CheckBox $Radio ; и используем это значение для активации/деактивации элементов
    EnableWindow $CheckBox1 $Radio ; и используем это значение для активации/деактивации элементов
    ${NSD_SetState} $CheckBox $Radio ; и используем это значение для назначения статуса чекбоксу
    ${NSD_SetState} $CheckBox1 $Radio ; и используем это значение для назначения статуса чекбоксу
FunctionEnd

Function RadioButton
  Pop $RadioButton
  Call Switching
FunctionEnd

Function RadioButton1
  Pop $RadioButton1
  Call Switching
FunctionEnd

Function FnRadioCheck
  ${NSD_GetState} $RadioButton $Radio
  ${NSD_GetState} $RadioButton1 $Radio1
  ${NSD_GetState} $CheckBox $Check
  ${NSD_GetState} $CheckBox1 $Check1
FunctionEnd

Section
  ${If} $Check == 1
    DetailPrint ""
  ${EndIf}

  ${If} $Check1 == 1
    DetailPrint ""
  ${EndIf}
SectionEnd

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

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

Отправлено: 08:31, 05-10-2019 | #2327


Аватара для AlekseyPopovv

Старожил


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

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


K.A.V., Как добавить картинки .bmp на каждый буттон?
Код: Выделить весь код
  ${NSD_CreateBitmap} 150u 3u 100% 100% ""
  Pop $Image
  ${NSD_SetImage} $Image "$PLUGINSDIR\1.bmp" $ImageHandle
  nsDialogs::Show
  ${NSD_FreeImage} $ImageHandle

Последний раз редактировалось AlekseyPopovv, 05-10-2019 в 18:09.


Отправлено: 11:29, 05-10-2019 | #2328


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

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


Contributor


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

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


AlekseyPopovv, если вы именно про то, чтобы заменить стиль квадратика галочки - то я не знаю, возможно, это делается только рисованием элемента "вручную" через стиль BS_OWNERDRAW
Может здесь кто таким вопросом озадачивался, подскажет

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


Отправлено: 08:22, 06-10-2019 | #2329


Аватара для AlekseyPopovv

Старожил


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

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


K.A.V., нет, я про картинки которые меняются при выборе "Установка" или "Распаковка".
Как здесь

Отправлено: 08:25, 06-10-2019 | #2330



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




 
Переход