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

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

 

Аватара для Alex S

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


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

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


MKN, спасибо! Забираю в копилку, пригодится и не раз...

Отправлено: 13:10, 30-01-2018 | #2181



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

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


Аватара для Flix

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


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

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


Встречайте NSIS v3.03 (релиз от 29 января 2018): страница загрузки

Что нового...
F.1.1 Release Notes

Building NSIS with Python 2.6 or older is no longer supported

F.1.2 Changelog
F.1.2.1 Major Changes

Added more NSD controls and macros (RFE #543)
Added !gettlbversion
Library TLB and VxD version support on POSIX (patch #284)

F.1.2.2 Minor Changes

Added System plug-in v2 syntax option
Added System plug-in B and H types
Added IntPtrCmp, IntPtrCmpU, and IntPtrOp
Added Int64Cmp, Int64CmpU and Int64Fmt (64-bit only)
Added IntOp and System::Int64Op >>> operator
Added more !define /math operators
Added WinVer.nsh IsDomainController (patch #286)
Plug-ins now set the ASLR, DEP, LAA, NOSEH and TS PE flags (bug #1188)
MakeNSIS exits with code 0 for various information commands (bug #1193)
Removed unused NSD_LB_Clear macro parameter

F.1.2.3 Translations

Added Tatar (patch #281)
Fixed and updated Scottish Gaelic (patch #285, bug #1197)
Updated Italian (bug #1194)

F.1.2.4 Build System

Added support for Python 3
Dropped support for Python 2.6 and older
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:00, 30-01-2018 | #2182


Аватара для Alex S

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


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

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


Добрый вечер всем. Есть вопрос по поводу переноса строки в Control_EDIT. Возникла идея создать страницу готовности к установке по аналогу inno (PreparingPage). За основу взял вариант который решался(и решился(спасибо Flix и MKN)) на этой страничке форума. Суть затеи такова: на сновании выбранных задач инсталляции должен выводиться список, в котором подробно указаны выбранные задачи(язык, ярлыки, путь установки...). Хм... Думал делов-то, при наличии уже имеющихся знаний и тем более готовых решений. Но не тут то было... Пробовал и так $\n и так \n и loop-ил сверху вниз и не вышло.
Что есть...
!define PRODUCT_NAME "My Program"
!define PRODUCT_VERSION "1.0"

!include "MUI2.nsh"
!include "Sections.nsh"
!include "nsDialogs.nsh"
!include "LogicLib.nsh"
!include "FileFunc.nsh"

Page custom PageInit1 PageDestroy1
!insertmacro MUI_PAGE_DIRECTORY
Page custom PreparingPage

;Languages
!define MUI_LANGDLL_ALLLANGUAGES
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_RESERVEFILE_LANGDLL
Function .OnInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

LangString PRPAGE_TEXT ${LANG_RUSSIAN} "Всё готово к установке"
LangString PRPAGE_TEXT ${LANG_ENGLISH} "Ready to Install"
LangString PRPAGE_SUBTEXT ${LANG_RUSSIAN} "Программа установки готова начать установку ${PRODUCT_NAME} на ваш компьютер."
LangString PRPAGE_SUBTEXT ${LANG_ENGLISH} "Setup is now ready to begin installing ${PRODUCT_NAME} on your computer."
LangString CUSTPAGE_1_TITLE ${LANG_RUSSIAN} "Выбор языка интерфейса и дополнительных задач"
LangString CUSTPAGE_1_TITLE ${LANG_ENGLISH} "Selecting language and additional tasks"
LangString CUSTPAGE_1_SUBTITLE ${LANG_RUSSIAN} "Выберите язык интерфейса и дополнительные задачи установки."
LangString CUSTPAGE_1_SUBTITLE ${LANG_ENGLISH} "Select the interface language and additional installation tasks."
LangString CUSTPAGE_1GRBOX1_CAPT ${LANG_RUSSIAN} "Язык интерфейса:"
LangString CUSTPAGE_1GRBOX1_CAPT ${LANG_ENGLISH} "Interface language:"
LangString CUSTPAGE_1RADBUT1_CAPT ${LANG_RUSSIAN} "Русский язык"
LangString CUSTPAGE_1RADBUT1_CAPT ${LANG_ENGLISH} "Russian language"
LangString CUSTPAGE_1RADBUT2_CAPT ${LANG_RUSSIAN} "Английский язык"
LangString CUSTPAGE_1RADBUT2_CAPT ${LANG_ENGLISH} "English language"
LangString CUSTPAGE_1GRBOX2_CAPT ${LANG_RUSSIAN} "Дополнительные задачи:"
LangString CUSTPAGE_1GRBOX2_CAPT ${LANG_ENGLISH} "Additional tasks:"
LangString CUSTPAGE_1CHBOX1_CAPT ${LANG_RUSSIAN} "Ярлык на Рабочем столе"
LangString CUSTPAGE_1CHBOX1_CAPT ${LANG_ENGLISH} "Desktop Shortcut"
LangString CUSTPAGE_1CHBOX2_CAPT ${LANG_RUSSIAN} "Ярлык(и) в меню Пуск"
LangString CUSTPAGE_1CHBOX2_CAPT ${LANG_ENGLISH} "Shortcut(s) in the Start menu"
LangString VIBRANO ${LANG_RUSSIAN} "Выбрано:"
LangString VIBRANO ${LANG_ENGLISH} "Selected:"

# Variables
var CustPage1
Var GroupBox1
var Check1
var Check2
Var CheckBox1
Var CheckBox2

Var GroupBox2
var Radio1
var Radio2
Var RadioButton1
Var RadioButton2

var Preparing
Var Preparing_Control_EDIT

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Main_setup.exe"
InstallDir "$PROGRAMFILES\My Program"

Function PageInit1
nsDialogs::Create 1018
Pop $CustPage1
${If} $CustPage1 == error
Abort
${EndIf}
${If} $LANGUAGE = ${LANG_RUSSIAN}
!insertmacro MUI_HEADER_TEXT $(CUSTPAGE_1_TITLE) $(CUSTPAGE_1_SUBTITLE)
${Else}
!insertmacro MUI_HEADER_TEXT $(CUSTPAGE_1_TITLE) $(CUSTPAGE_1_SUBTITLE)
${EndIf}
; === GroupBox1 (type: GroupBox) ===
${NSD_CreateGroupBox} 1.9u 2.38u 131.65u 43u "$(CUSTPAGE_1GRBOX1_CAPT)"
Pop $GroupBox1
; === RadioButton1 (type: RadioButton) ===
${NSD_CreateRadioButton} 7.9u 13.54u 121.11u 12.31u "$(CUSTPAGE_1RADBUT1_CAPT)"
Pop $RadioButton1
${NSD_SetState} $RadioButton1 1
; === RadioButton2 (type: RadioButton) ===
${NSD_CreateRadioButton} 7.9u 27.54u 121.11u 12.31u "$(CUSTPAGE_1RADBUT2_CAPT)"
Pop $RadioButton2
; === GroupBox2 (type: GroupBox) ===
${NSD_CreateGroupBox} 1.32u 53.38u 131.65u 80.54u "$(CUSTPAGE_1GRBOX2_CAPT)"
Pop $GroupBox2
; === CheckBox1 (type: Checkbox) ===
${NSD_CreateCheckbox} 7.9u 66.08u 121.11u 12.31u "$(CUSTPAGE_1CHBOX1_CAPT)"
Pop $CheckBox1
${NSD_SetState} $CheckBox1 1
; === CheckBox2 (type: Checkbox) ===
${NSD_CreateCheckbox} 7.9u 82.46u 121.11u 12.31u "$(CUSTPAGE_1CHBOX2_CAPT)"
Pop $CheckBox2
${NSD_SetState} $CheckBox2 1
nsDialogs::Show
FunctionEnd

Function PageDestroy1
${NSD_GetState} $RadioButton1 $Radio1
${NSD_GetState} $RadioButton2 $Radio2
${NSD_GetState} $CheckBox1 $Check1
${NSD_GetState} $CheckBox2 $Check2
FunctionEnd



Function PreparingPage
nsDialogs::Create 1018
Pop $Preparing
${If} $Preparing == error
Abort
${EndIf}
; !insertmacro MUI_HEADER_TEXT "" ""
${If} $LANGUAGE = ${LANG_RUSSIAN}
!insertmacro MUI_HEADER_TEXT $(PRPAGE_TEXT) $(PRPAGE_SUBTEXT)
${Else}
!insertmacro MUI_HEADER_TEXT $(PRPAGE_TEXT) $(PRPAGE_SUBTEXT)
${EndIf}
!define MYMULTILINEEDIT_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_MULTILINE}|${ES_READONLY}
nsDialogs::CreateControl EDIT ${MYMULTILINEEDIT_STYLE} ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} 0u 0u 300u 140u ""
Pop $Preparing_Control_EDIT
Call ShowSelectedItems
nsDialogs::Show
FunctionEnd

Function ShowSelectedItems
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(VIBRANO)" ;"STR:$(VIBRANO)$\n" - такой вариант не работает
${If} $Radio1 == 1
; loop:
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(CUSTPAGE_1RADBUT1_CAPT)"
;IfErrors +1 loop
${If} $CheckBox1 == 1
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(CUSTPAGE_1CHBOX1_CAPT)"
${EndIf}
${EndIf}
FunctionEnd


Section ""
SectionEnd


Что примерно хотел сделать

Отправлено: 20:33, 31-01-2018 | #2183


Аватара для Flix

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


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

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


Alex S, предлагаю вам такой вариант решения. В вашем примере сценария замените функцию "ShowSelectedItems" следующим кодом:

Новая функция ShowSelectedItems
Код: Выделить весь код
Function ShowSelectedItems

  StrCpy $7 $(VIBRANO)

  ${If} $Radio1 == ${BST_CHECKED}
    StrCpy $7 '$7$\r$\n$\r$\n$\t$(CUSTPAGE_1GRBOX1_CAPT) $(CUSTPAGE_1RADBUT1_CAPT)'
  ${EndIf}

  ${If} $Radio2 == ${BST_CHECKED}
    StrCpy $7 '$7$\r$\n$\r$\n$\t$(CUSTPAGE_1GRBOX1_CAPT) $(CUSTPAGE_1RADBUT2_CAPT)'
  ${EndIf}

  ${If} $Check1 == ${BST_CHECKED}
  ${OrIf} $Check2 == ${BST_CHECKED}
    StrCpy $7 '$7$\r$\n$\r$\n$\t$(CUSTPAGE_1GRBOX2_CAPT)'
  ${EndIf}

  ${If} $Check1 == ${BST_CHECKED}
    StrCpy $7 '$7$\r$\n$\r$\n$\t$\t$(CUSTPAGE_1CHBOX1_CAPT)'
  ${EndIf}

  ${If} $Check2 == ${BST_CHECKED}
    StrCpy $7 '$7$\r$\n$\r$\n$\t$\t$(CUSTPAGE_1CHBOX2_CAPT)'
  ${EndIf}

  StrCpy $7 '$7$\r$\n$\r$\n$\r$\n$\t$(^DirSubText) "$(^NameDA)":'
  StrCpy $7 '$7$\r$\n$\r$\n$\t$INSTDIR'
  SendMessage $Preparing_Control_EDIT ${WM_SETTEXT} 0 "STR:$7"

FunctionEnd

Смысл вот в чем. Под текст, который необходимо вывести на странице, мы выделяем переменную (в примере $7). В ней мы формируем массив строк, в зависимости от выбранных пользователем параметров установки. После чего, последней командой, мы передаем эту строку необходимому элементу управления. Переносы и отступы формируются предусмотренными в NSIS константами: перевод строки — $\r$\n; табуляция — $\t. Под строку желательно выделить отдельную переменную, а не предустановленную.

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

Отправлено: 00:56, 01-02-2018 | #2184


Аватара для Alex S

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


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

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


Flix, спасибо большое за помощь. Очень интересный вариант... Я если честно мыслил в другую сторону. Сел, почитал справочку NSIS и осенило... Начал пробовать вариант с созданием временного файла, в который по ходу записываются данные настроек установки и в последний момент с него производится считывание и вывод информации... Собственно, как вариант, идея сработала. Твой вариант интереснее, я че-то немного недопетрил идти в этом направлении. Ещё раз спасибо за помощь.

Вот что вышло у меня...
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
Var /Global PrepFile
;FileOpen $PrepFile "$PLUGINSDIR\MyPreparingFile.txt" w
;FileClose $PrepFile # Закрываем файл
FunctionEnd

Function ShowSelectedItems
FileOpen $PrepFile "$PLUGINSDIR\MyPreparingFile.txt" w ;
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(VIBRANO)"
${If} $Radio1 == 1
FileWrite $PrepFile "$\r$\n$\r$\n $(CUSTPAGE_1RADBUT1_CAPT)$\r$\n" # Записываем нужную информацию
${Else}
FileWrite $PrepFile "$\r$\n$\r$\n $(CUSTPAGE_1RADBUT2_CAPT)$\r$\n" # Записываем нужную информацию
${EndIf}
${If} $Check1 == 1
FileWrite $PrepFile "$(CUSTPAGE_1CHBOX1_CAPT)$\r$\n"
${EndIf}
${If} $Check2 == 1
FileWrite $PrepFile "$(CUSTPAGE_1CHBOX2_CAPT)$\r$\n"
${EndIf}
FileClose $PrepFile # Закрываем файл

FileOpen $PrepFile "$PLUGINSDIR\MyPreparingFile.txt" r
loop:
FileRead $PrepFile $2
SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$2"
IfErrors +1 loop
FileClose $PrepFile # Закрываем файл
FunctionEnd

Отправлено: 02:36, 01-02-2018 | #2185


Аватара для AlekseyPopovv

Старожил


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

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


Как проверить контрольную сумму "CRC" файла? Если не совпадает, то сообщение "куку" и выход, если совпадает, то идём дальше...

Отправлено: 11:13, 04-02-2018 | #2186


Аватара для Flix

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


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

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


Цитата AlekseyPopovv:
Как проверить контрольную сумму "CRC" файла? »
Воспользуйтесь плагином CRCCheck.
Пример
Код: Выделить весь код
Function CheckCRC
  # Проверяем наличие требуемого файла
  IfFileExists $INSTDIR\file.exe 0 noFile
    # Если файл существует, то проверяем его CRC
    # Для проверки используется плагин CRCCheck (http://nsis.sourceforge.net/CRCCheck_plug-in)
    CRCCheck::GenCRC $INSTDIR\file.exe
    # Записываем значение CRC-файла из стека в переменную $1
    Pop $1
    # Выводим сообщение в отчете установки со значением CRC-файла
    DetailPrint "~ Файл file.exe CRC = $1"
    # Необходимая контрольная сумма файла (НЕХ) CRC = 6528E1D3
    # Сравниваем значения полученной CRC с заданным (в десятичном формате)
    ${IfNot} $1 == 1697178067
    # Если значения не совпадают...
    
    # Метка перехода в случае отсутствия указанного файла
    noFile:
      # Выводим сообщение в отчете установки о неверном значении CRC
      DetailPrint "~ Файл file.exe не найден или его CRC отличается от исходной"
      # Показываем пользователю диалог с сообщением
      MessageBox MB_ICONINFORMATION|MB_OK "Продолжить работу инсталлятора невозможно.$\r$\n\
                                           Файл file.exe не существует или его CRC не$\r$\n\
                                           не совпадает с оригинальным значением."
      # Завершаем работу программы установки
      Quit
    ${EndIf}
  # Выводим сообщение в отчете установки об успешном выполнении операции
  DetailPrint "~ CRC файла file.exe - OK"
FunctionEnd
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:57, 04-02-2018 | #2187


Аватара для AlekseyPopovv

Старожил


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

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


Flix, разобрался.

Последний раз редактировалось AlekseyPopovv, 04-02-2018 в 15:28.


Отправлено: 13:07, 04-02-2018 | #2188


Аватара для Alex S

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


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

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


Мужики, добрый день. Снова возник вопрос с диалогом выбора папки назаначения. Возможно ли в зависимости от языка инсталлятора(русский-английский) сменить текст кнопок "отмена" и "создать папку" на текст соответствующего языка?

Скрин для ясности вопроса
Если можно, на базе этого скрипта...

!define PRODUCT_NAME "MyProg"
!define PRODUCT_VERSION "1.0"

!include "MUI2.nsh"
!include "nsDialogs.nsh"

Var BrowsePage
Var BrowsePage_DirRequest1_Txt
Var BrowsePage_DirRequest1_Btn
Var BrowsePage_DirRequest2_Txt
Var BrowsePage_DirRequest2_Btn

Page custom BrowsePage1

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "English"

LangString BrowseButtonCaption ${LANG_RUSSIAN} "Обзор..."
LangString BrowseButtonCaption ${LANG_ENGLISH} "Browse..."
LangString CUSTPAGE_TITLE ${LANG_RUSSIAN} "Текст на русском"
LangString CUSTPAGE_TITLE ${LANG_ENGLISH} "Tekst na angliyskom"
LangString CUSTPAGE_SUBTITLE ${LANG_RUSSIAN} "СубТекст на русском"
LangString CUSTPAGE_SUBTITLE ${LANG_ENGLISH} "SubTekst na angliyskom"
LangString BrowseDialogLabel ${LANG_RUSSIAN} "Текст на русском"
LangString BrowseDialogLabel ${LANG_ENGLISH} "Tekst na angliyskom"

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"

Function .OnInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

Function BrowsePage1
nsDialogs::Create 1018
Pop $BrowsePage
${If} $BrowsePage == error
Abort
${EndIf}
${If} $LANGUAGE = ${LANG_RUSSIAN}
!insertmacro MUI_HEADER_TEXT $(CUSTPAGE_TITLE) $(CUSTPAGE_SUBTITLE)
${Else}
!insertmacro MUI_HEADER_TEXT $(CUSTPAGE_TITLE) $(CUSTPAGE_SUBTITLE)
${EndIf}
; === DirRequest1_Txt (type: Text) ===
${NSD_CreateText} 7.9u 17.23u 226.43u 12.31u "$SMPROGRAMS\${PRODUCT_NAME}"
Pop $BrowsePage_DirRequest1_Txt

; === DirRequest1_Btn (type: Button) ===
${NSD_CreateButton} 235.65u 17.23u 52.66u 12.31u "$(BrowseButtonCaption)"
Pop $BrowsePage_DirRequest1_Btn
${NSD_OnClick} $BrowsePage_DirRequest1_Btn BrowsePage_DirRequest1_Click

; === DirRequest2_Txt (type: Text) ===
${NSD_CreateText} 7.9u 46.77u 226.43u 12.31u "$SMPROGRAMS\${PRODUCT_NAME}"
Pop $BrowsePage_DirRequest2_Txt

; === DirRequest2_Btn (type: Button) ===
${NSD_CreateButton} 235.65u 46.77u 52.66u 12.31u "$(BrowseButtonCaption)"
Pop $BrowsePage_DirRequest2_Btn
${NSD_OnClick} $BrowsePage_DirRequest2_Btn BrowsePage_DirRequest2_Click

nsDialogs::Show
FunctionEnd


Function BrowsePage_DirRequest1_Click
Pop $R0
${If} $R0 == $BrowsePage_DirRequest1_Btn
${NSD_GetText} $BrowsePage_DirRequest1_Txt $R0
nsDialogs::SelectFolderDialog /NOUNLOAD "" "$R0"
Pop $R0
${If} "$R0" != "error"
${NSD_SetText} $BrowsePage_DirRequest1_Txt "$R0"
${EndIf}
${EndIf}
FunctionEnd

Function BrowsePage_DirRequest2_Click
System::Call 'SHELL32::SHGetSpecialFolderLocation(i0,i0x2,*i.r2)i.r0'
System::Call '*(i$hwndparent,i$2,i,t "$(BrowseDialogLabel)",i0x470,kr3,i0,i0)i.r1'
System::Call 'SHELL32::SHBrowseForFolder(ir1)i.r0'
System::Call 'OLE32::CoTaskMemFree(ir2)'
System::Free $1
${If} $0 <> 0
System::Call 'SHELL32::SHGetPathFromIDList(i$0,t "" R9)'
${NSD_SetText} $BrowsePage_DirRequest2_Txt= $R9
${EndIf}
System::Call 'OLE32::CoTaskMemFree(ir0)'
FunctionEnd

Section ""
SectionEnd

Отправлено: 16:41, 05-02-2018 | #2189


Аватара для Flix

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


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

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


Цитата Alex S:
Возможно ли в зависимости от языка инсталлятора(русский-английский) сменить текст кнопок "отмена" и "создать папку" на текст соответствующего языка? »
Это диалоговое окно и в первом и втором случае вызывается из системной библиотеки, язык которой зависит от языка установленной ОС. То есть, независимо от выбранного языка установки, на русской системе это диалоговое окно будет на русском. Соответственно на английской системе этот диалог будет на английском и т.д. Единственное что можно задать, так это надпись в шапке диалога (на вашем скрине показано стрелкой).

Отправлено: 23:11, 05-02-2018 | #2190



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




 
Переход