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

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

 

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


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

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


Добрый день!
Подскажите пожалуйста как добавить свою кнопку на стандартную страницу компонентов. Добавил следующий код, но
кнопка рисуется только на первой странице.
Заранее спасибо.

Код: Выделить весь код
!define MUI_PAGE_CUSTOMFUNCTION_SHOW "CompShowProc"

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "LICENSE"
!insertmacro MUI_PAGE_DIRECTORY 
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES

var HostButton

Function CompShowProc

 ${NSD_CreateButton} 0 250 100% 12u "Текст"
 Pop $HostButton

FunctionEnd

Отправлено: 17:26, 05-08-2013 | #431



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

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


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


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

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


Чего-то я совсем запутался...
Рискну снова задать вопрос по секциям.
читать дальше »

Правильно ли написаны примеры подобные нижеприведенному в Справочнике по NSIS:
Код: Выделить весь код
Section "Тестирование" TEST_SEC
SectionEnd

Section 
; Не должно ли здесь и в конце вместо Section быть Function ?
 SectionGetText ${TEST_SEC} $0
 StrCpy $0 "$0 - $WINDIR"
 SectionSetText ${TEST_SEC} $0
SectionEnd
В таком виде, все что написано между Section, не работает,



а если вставить (без Section) в функцию, напр. (.OnInit) - то работает.

А спросить хотел вот о чем.
Предполагается, что нижеприведенный скрипт будет выполнять пропатчивание. Закоментированный код из секции "Обновление" будет позже добавлен в существующие секции с соответствующим изменением имен файлов.
Можно ли, используя WinVer2, скрывать секции PROGRUS и PROGUKR, если установка выполняется на 64 разрядной системе и, наоборот, скрывать PROGRUS64 и PROGUKR64 при установке на 32 разрядной системе? Если можно, укажите поточнее, где или что об этом написано в справке или справочнике. А если поделитесь кодом - буду очень благодарен.
Еще интересует, почему файл деинсталлятора все равно создается, если из программы установки я выхожу, напр. из диалога выбора компонентов?

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

SetCompressor /SOLID lzma

; Имя приложения
!define PRODUCT_NAME "UITest"
; Версия приложения
!define PRODUCT_VERSION "1.0"
; Папка, где будут храниться исходные файлы, подлежащие сжатию.
!define pkgdir "d:\package"

; Запоминаем язык установки InstallerLanguage
!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
!define MUI_LANGDLL_REGISTRY_KEY "Software\UITest\Option"
!define MUI_LANGDLL_REGISTRY_VALUENAME "InstallerLanguage"
!insertmacro MUI_RESERVEFILE_LANGDLL  ; ЧТО ЭТО и НУЖНО ЛИ ОНО????
!define MUI_ABORTWARNING

; Константой MUI_ICON определяем значок инсталятора. Без константы исп. modern-install.ico:
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-colorful.ico"
; Константой MUI_UNICON определяем значок деинсталятора. Без констант исп. modern-uninstall.ico:
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-colorful.ico"

!define MUI_COMPONENTSPAGE_SMALLDESC

; Станицы установки:
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "$(License)"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
;!insertmacro MUI_PAGE_FINISH
; Страницы удаления:
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_COMPONENTS
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH

; Указываем доступные языки инсталяции:
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "Ukrainian"

Function .OnInit
; Отображаем диалог выбора языка
!insertmacro MUI_LANGDLL_DISPLAY

; Определяем разрядность системы
   ${WinPlatformArchitecture} $R1
   MessageBox MB_ICONINFORMATION|MB_OK "WinPlatformArchitecture = $R1"
FunctionEnd
;--------------------------------------------------------------------
;Указываем деинсталятору использовать язык инсталлятора
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
;--------------------------------------------------------------------
; Текст внизу окон (вместо nullsoft bla-bla
BrandingText "TEST"
; Назначаем инсталлятору заголовок
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
;--------------------------------------------------------------------
; Задаем папку установки по умолчанию.
InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}"
; Задаем имя файла нашего инсталлятора
OutFile "${PRODUCT_NAME}.${PRODUCT_VERSION}.exe"
; Получится: UITest.1.0.exe
; Для новых ОС (Vista, Windows 7/8) можно запросить права пользователя ???
RequestExecutionLevel user
; Указываем режим отображения хода выполнения инсталляции (протокола), если нужно.
;ShowInstDetails show

;--------------------------------
;Section "Обновление"
  ;SetOutPath $INSTDIR
; Update the file - it will be replaced with the new version
  ;DetailPrint "Prepare to updating oldfile.txt using patch..."
  ;!insertmacro VPatchFile "patch.pat" "$INSTDIR\oldfile.txt" "$INSTDIR\temporaryfile.txt"
;SectionEnd

Section /o "$(PROGRUS)" SecRUS
   SetOutPath $INSTDIR
   File "1.txt"
SectionEnd

Section /o "$(PROGUKR)" SecUKR
   SetOutPath $INSTDIR
   File "2.txt"
SectionEnd

Section /o "$(PROGRUS64)" SecRUS64
   SetOutPath $INSTDIR
   File "1.64.txt"
SectionEnd

Section /o "$(PROGUKR64)" SecUKR64
   SetOutPath $INSTDIR
   File "2.64.txt"
SectionEnd
;--------------------------------
;Installer Functions
Function .onSelChange
; Выбор между компонентам 1 и 4
  !insertmacro StartRadioButtons $1
    !insertmacro RadioButton ${SecRUS}
    !insertmacro RadioButton ${SecUKR}
    !insertmacro RadioButton ${SecRUS64}
    !insertmacro RadioButton ${SecUKR64}
  !insertmacro EndRadioButtons

 ;Create uninstaller
  WriteUninstaller "$INSTDIR\Uninstall.exe"
FunctionEnd

;--------------------------------
;Uninstaller Section
Section "Un.$(locUN)" SecUN
delete "$INSTDIR\1.64.txt"
delete "$INSTDIR\2.64.txt"
delete "$INSTDIR\1.txt"
delete "$INSTDIR\2.txt"
delete "$INSTDIR\Uninstall.exe"
DeleteRegKey /ifempty HKLM "Software\UITest\Option"
  ;RMDir "$INSTDIR"
SectionEnd

;----------------------------------------------------------------
; Файлы с текстом Лицензионного соглашения
LicenseLangString License ${LANG_RUSSIAN} "lic_rus.txt"
LicenseLangString License ${LANG_UKRAINIAN} "lic_ukr.txt"
   
; Текст описания секции
LangString DESC_PROGRUS ${LANG_RUSSIAN} "Русская версия программы"
LangString DESC_PROGRUS ${LANG_UKRAINIAN} "Російська версія програми"
LangString DESC_PROGUKR ${LANG_RUSSIAN} "Украинская версия программы"
LangString DESC_PROGUKR ${LANG_UKRAINIAN} "Українська версія програми"
LangString DESC_PROGRUS64 ${LANG_RUSSIAN} "Русская версия программы(x64)"
LangString DESC_PROGRUS64 ${LANG_UKRAINIAN} "Російська версія програми(x64)"
LangString DESC_PROGUKR64 ${LANG_RUSSIAN} "Украинская версия программы(x64)"
LangString DESC_PROGUKR64 ${LANG_UKRAINIAN} "Українська версія програми(x64)"
; Текст названия секции
LangString PROGRUS ${LANG_RUSSIAN} "Русская версия (x86)"
LangString PROGRUS ${LANG_UKRAINIAN} "Російська версія (x86)"
LangString PROGUKR ${LANG_RUSSIAN} "Украинская версия (x86)"
LangString PROGUKR ${LANG_UKRAINIAN} "Українська версія (x86)"
LangString PROGRUS64 ${LANG_RUSSIAN} "Русская версия (x64)"
LangString PROGRUS64 ${LANG_UKRAINIAN} "Російська версія (x64)"
LangString PROGUKR64 ${LANG_RUSSIAN} "Украинская версия (x64)"
LangString PROGUKR64 ${LANG_UKRAINIAN} "Українська версія (x64)"
; Текст описания секции деинсталяции
LangString DESC_UNIN ${LANG_RUSSIAN} "Удалить локализованную версию и восстановить английский язык программы"
LangString DESC_UNIN ${LANG_UKRAINIAN} "Видалити локалізовану версію та відновити англійську мову програми"
; Текст названия секции деинсталяции
LangString locUN ${LANG_RUSSIAN} "Удалить локализованный файл"
LangString locUN ${LANG_UKRAINIAN} "Видалити локалізований файл"
; Макрос, который показывает текст описания компонентов для Install
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
             !insertmacro MUI_DESCRIPTION_TEXT ${SecRUS} $(DESC_PROGRUS)
             !insertmacro MUI_DESCRIPTION_TEXT ${SecUKR} $(DESC_PROGUKR)
             !insertmacro MUI_DESCRIPTION_TEXT ${SecRUS64} $(DESC_PROGRUS64)
             !insertmacro MUI_DESCRIPTION_TEXT ${SecUKR64} $(DESC_PROGUKR64)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
; Макрос, который показывает текст описания компонентов для Uninstall
!insertmacro MUI_UnFUNCTION_DESCRIPTION_BEGIN
     !insertmacro MUI_DESCRIPTION_TEXT ${SecUN} $(DESC_UNIN)
!insertmacro MUI_UnFUNCTION_DESCRIPTION_END

Отправлено: 16:02, 06-08-2013 | #432


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


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

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


Частично разобрался. !define MUI_PAGE_CUSTOMFUNCTION_SHOW "CompShowProc" нужно ставить перед страницей которую кастомизируешь. Но... вопрос остался. При добавлении кнопки таким способом инсталлятор зависает на странице компонентов.
Предположения?

Отправлено: 16:25, 06-08-2013 | #433


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

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


Contributor


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

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


Цитата Kopejkin:
Правильно ли написаны примеры подобные нижеприведенному в Справочнике по NSIS »
читать дальше »

Примеры написаны правильно, вопрос в другом: что вы хотите реализовать

В справочнике заключено в "секции" (именно по Setcion страничке) - это всего лишь пример исполнения команд

Цитата Kopejkin:
В таком виде, все что написано между Section, не работает, »
И не должно срабатывать, ибо...Ответил выше, секции отрабатываются поочерёдно, и "косметические" изменения (в вашем случае имя секции) вам не отобразятся, т.к. секции отрабатываются в сам момент начала процесса установки

Код:
Код: Выделить весь код
 SectionGetText ${TEST_SEC} $0
 StrCpy $0 "$0 - $WINDIR"
 SectionSetText ${TEST_SEC} $0
Вам нужно поместить скажем, в custom page перед показом странички компонентов, т.е. вот так:


Код: Выделить весь код
 Page Custom SectionName
!insertmacro MUI_PAGE_COMPONENTS
и добавить функцию:
Код: Выделить весь код
Function SectionName
 SectionGetText ${TEST_SEC} $0
 StrCpy $0 "$0 - Мой текст"
 SectionSetText ${TEST_SEC} $0
FunctionEnd
Обратите внимание на то, что данная функция будет отрабатываться каждый раз при переходе с предыдущей стрнаницы инсталлера на страничку компонентов, т.е. текст будет постоянно добавляться...Можно этого избежать, прописывая имя секции в команде назначения текста:
Код: Выделить весь код
Function SectionName
 StrCpy $0 "Имя моей секции - Добавляемый текст"
 SectionSetText ${TEST_SEC} $0
FunctionEnd
Либо, можете прописывать данную команду в функцию .onInit, имя секции изменится только при запуске инсталлятора
Вообще, вам нужно было описать конкретную цель и задачи, мы бы дали вам конкретный совет и, возможно, готовый код...А гадать, что вам именно нужно, предоставляя кучу примеров, как-то неохото...


Цитата Kopejkin:
скрывать секции PROGRUS и PROGUKR, если установка выполняется на 64 разрядной системе и, наоборот, скрывать PROGRUS64 и PROGUKR64 при установке на 32 разрядной системе? Если можно, укажите поточнее, где или что об этом написано в справке или справочнике. А если поделитесь кодом - буду очень благодарен. »
читать дальше »

В начале кода создайте переменную:
Код: Выделить весь код
var IsWow64Process
Пропимсываем определение типа процесса
Код: Выделить весь код
 
Function .onInit
  System::Call kernel32::GetCurrentProcess()i.s
  System::Call kernel32::IsWow64Process(is,*i.s)
  Pop $IsWow64Process
FunctionEnd
Если $IsWow64Process = 0 - 32-bit процесс

Т.е. там же, в функции .onInit уже пляшем от значения переменной $IsWow64Process и скрываем "лишние" секции
Скрыть секцию легко - достаточно назначить пустое имя секции:
Код: Выделить весь код
 
Function .onInit
   System::Call kernel32::GetCurrentProcess()i.s
   System::Call kernel32::IsWow64Process(is,*i.s)
   Pop $IsWow64Process
 StrCmp $IsWow64Process "1" 0 +3
 call Is64Bit
 goto +2
 call Is32Bit
FunctionEnd 

Function Is64Bit
; Скрываем секции, если процесс 64 битный
 SectionSetText ${PROGRUS} ""
 SectionSetText ${PROGUKR} ""  
FunctionEnd

Function Is32Bit
; Скрываем секции, если процесс 32 битный
 SectionSetText ${PROGRUS64} ""
 SectionSetText ${PROGUKR64} ""   
FunctionEnd
Кстати, не забудьте, что если у вас секции по умолчанию отмечены для установки, то скрытая секция всё равно отработает все команды (скрытие секции не снимает флаг её отметки, а всего лишь скрывает от пользователя)


Цитата Kopejkin:
Еще интересует, почему файл деинсталлятора все равно создается, если из программы установки я выхожу, напр. из диалога выбора компонентов? »
читать дальше »

Потому что у вас команда на создание деинсталлятора прописана в функцию, которая выполняется при взаимодействии с компонентами!
Код: Выделить весь код
Function .onSelChange
; Выбор между компонентам 1 и 4
  !insertmacro StartRadioButtons $1
    !insertmacro RadioButton ${SecRUS}
    !insertmacro RadioButton ${SecUKR}
    !insertmacro RadioButton ${SecRUS64}
    !insertmacro RadioButton ${SecUKR64}
  !insertmacro EndRadioButtons

 ;Create uninstaller
  WriteUninstaller "$INSTDIR\Uninstall.exe"
FunctionEnd
Переместите данную команду в post секцию ниже всех...


Цитата tony1990:
Частично разобрался. !define MUI_PAGE_CUSTOMFUNCTION_SHOW "CompShowProc" нужно ставить перед страницей которую кастомизируешь. Но... вопрос остался. При добавлении кнопки таким способом инсталлятор зависает на странице компонентов »
Цитата tony1990:
Предположения? »
Не умеем мы предполагать, скрипт в студию

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

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

Отправлено: 17:22, 06-08-2013 | #434


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


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

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


Ну вот скриптик упрощённый для примера. На странице приветствия кнопка рисуется, а если закомментировать/убрать строку !insertmacro MUI_PAGE_WELCOME, то на странице компонентов кнопка не отображается. Правда тут инсталлятор не зависает.

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

var HostButton


!define MUI_PAGE_CUSTOMFUNCTION_SHOW "CompShowProc"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES


!insertmacro MUI_LANGUAGE "English"


Function CompShowProc

 ${NSD_CreateBrowseButton} 0 0 100% 15u "Текст"
 Pop $HostButton

FunctionEnd


Section "Component1" 
SectionEnd 

Section "Component2" 
SectionEnd 

Section "Component2" 
SectionEnd

Отправлено: 20:43, 06-08-2013 | #435


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


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

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


K.A.V., большое спасибо за развернутый ответ!
Цитата K.A.V.:
...что вы хотите реализовать »
Пока я просто пытаюсь хоть что-нибудь понять.

Отправлено: 04:05, 07-08-2013 | #436


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


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

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


Почитал форум. Похоже что править стандартные страницы можно только при помощи системных функций. Ребят, киньте плиз ссылочку на документацию по системным функциям

Отправлено: 14:32, 08-08-2013 | #437


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


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

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


Вложения
Тип файла: zip AboutButton.zip
(2.6 Kb, 13 просмотров)

Нашёл решение в виде Button.dll Но возникла небольшая сложность. Кнопка работает только в нижней части экрана. А если скажем изменить координату Y на 200, то уже не работает. Нужна помощь!

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

!define IDC_ABOUT 1300

!define MUI_COMPONENTSPAGE_SMALLDESC
                                        
Name "Example1"
OutFile "example1.exe"

!define MUI_PAGE_CUSTOMFUNCTION_SHOW "CompShowProc"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"


Function CompShowProc

    System::Call 'kernel32::GetModuleHandle(i0)i.r0'
    System::Call 'user32::CreateWindowEx(i0,t"Button",t"Add Host",i${BS_PUSHBUTTON}|${WS_CHILD}|${WS_VISIBLE}|${WS_TABSTOP},i80,i300,i90,i25,i$HWNDPARENT,i${IDC_ABOUT},ir0,i0)i.R0'
    System::Call 'kernel32::FreeLibrary(ir0)'
    CreateFont $0 '$(^Font)' '$(^FontSize)'
    SendMessage $R0 ${WM_SETFONT} $0 0
    GetFunctionAddress $0 FuncAbout
    ButtonEvent::AddEventHandler /NoUnload ${IDC_ABOUT} $0

FunctionEnd

Function FuncAbout

    ;0x40=MB_OK(0x0)|MB_ICONINFORMATION(0x40)
    System::Call 'user32::MessageBox(i$HWNDPARENT,t"Всё отлично!",t"About",i0x40)'

FunctionEnd


Section "Component1" 
SectionEnd 

Section "Component2" 
SectionEnd 

Section "Component3" 
SectionEnd

Отправлено: 17:10, 09-08-2013 | #438


Аватара для kotkovets

Ветеран


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

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


Цитата:
А если скажем
изменить координату Y на 200, то
уже не работает
перекрывается стандартными контролами странички, поэтому не видно, для начала нужно править ресурсы установщика, примеров много в архиве темы.

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


Отправлено: 20:32, 10-08-2013 | #439


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


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

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


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

Код: Выделить весь код
   ; Update the file - it will be replaced with the new version
  DetailPrint "Prepare to updating..."
  !insertmacro VPatchFile "ws64ukr.pat" "$INSTDIR\WinSnap64.exe" "$INSTDIR\temporaryfile.exe"

Последний раз редактировалось Kopejkin, 14-08-2013 в 18:08.


Отправлено: 14:54, 11-08-2013 | #440



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




 
Переход