|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать iglezz,
Ага, въехал... А как сделать что бы инсталлятор нельзя было открыть в 7z? Можно в личку. |
Последний раз редактировалось AlekseyPopovv, 01-10-2019 в 11:37. Отправлено: 11:28, 01-10-2019 | #2321 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Как создать MUI_PAGE_DIRECTORY custom?
И как задать разные InstallDir для обычной и портативной версий? |
Отправлено: 17:59, 04-10-2019 | #2322 |
![]() Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата AlekseyPopovv:
Цитата AlekseyPopovv:
|
||
------- Отправлено: 18:20, 04-10-2019 | #2323 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Цитата K.A.V.:
|
|
Отправлено: 18:42, 04-10-2019 | #2324 |
![]() Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата AlekseyPopovv:
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 |
|
------- Отправлено: 19:33, 04-10-2019 | #2325 |
Старожил Сообщения: 169
|
Профиль | Отправить 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 |
![]() Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать AlekseyPopovv, отвечу сразу на вопрос, заданный в личке
При нажатии кнопки "Назад" - у вас диалог заново инициализируется с вашими прописанными состояниями элементов Соответственно, чтобы сделать более умный диалог, нам нужно код написать таким образом, чтобы он учитывал сей факт, что кто-то нажмёт "Назад" и нам будет необходимо поставить всё так, как выставил пользователь Для этого, нам нужно сначала в секцию .onInit прописать в переменные, состояние элементов управления по-умолчанию: Затем заменим ваш кусок кода: Скрытый текст
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 прописано в секции, это неправильно, т.к. секции обрабатываются непосредственно при начале установки в соответственно, нам нужно переназначать $INSTDIR до появления диалога выбора директории установки Поэтому можно просто в конец функции 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 |
------- Отправлено: 08:31, 05-10-2019 | #2327 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать |
Последний раз редактировалось AlekseyPopovv, 05-10-2019 в 18:09. Отправлено: 11:29, 05-10-2019 | #2328 |
![]() Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать AlekseyPopovv, если вы именно про то, чтобы заменить стиль квадратика галочки - то я не знаю, возможно, это делается только рисованием элемента "вручную" через стиль BS_OWNERDRAW
Может здесь кто таким вопросом озадачивался, подскажет |
------- Отправлено: 08:22, 06-10-2019 | #2329 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать K.A.V., нет, я про картинки которые меняются при выборе "Установка" или "Распаковка".
Как здесь |
Отправлено: 08:25, 06-10-2019 | #2330 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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 |
|