[архив].: NSIS - все вопросы :.

Ответить
 • Просмотры: 34
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата silione:



А как при всем этом сделать чтобы только один раз щелкать по строке?
[архив].: NSIS - все вопросы :.




Это вряд ли - ограничение NSIS, ведь когда отмечаешь чебокс группы, должны отмечатся чебоксы или снимается чебоксы в секционной группе, следовательно изменяются флаги секций с 0 на 1. И при отметке чебоксов секций флаги изменяются (с двух сторон палят пушками в секции Изображение, куда им деваться то!). В последнем примере - именно так сделано на такой логике переключения секций, т.е при флаге равным 0 - секция не отмечена и наоборот.



ЗЫ. хотя явно утверждать не буду, что нельзя именно так и сделать переключения...Ведь я всего в NSIS не знаюИзображение
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата jackrv:



Где можно почитать про реализацию ключей при "тихой установке" которая используется тут?
[архив].: NSIS - все вопросы :.




Я, как автор "ключей", готовлю техническую статью о том, как такое сделать, и в частности, как сделать генератор ответов для интсталлятора. Всё будет.
Аватара пользователя
MKN

Re: [архив].: NSIS - все вопросы :.

Сообщение MKN »

kotkovets, подскажи пожалуйста :

Что означает в скриптах +2 , +3 (и где про это узнать подробнее и по русски ) ?



И как организовать после определения наличия (или отсутствия) установленного ПО ? :



1. Если ПО не установлено, то запуск необходимого приложения из $Temp с последующим удалением исходного файла запуска после установки.

(Если установлено - продолжение установки без всяких сообщений.)



и такой вариант :



2. Если ПО не установлено, то вызов сообщения : "Приложение такое то не установлено". И в нём же (в его окне) выбор кнопок : "Установить ?" (А затем его запуск) " Отмена" и " Продолжить установку".
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата treylav:



хромает ... реализация
[архив].: NSIS - все вопросы :.




И полное отсутствие чтения справки и просмотров примеров в папке NSIS...

!define - вообще то, эта команда препроцессора NSIS - помещает опр. значение в константу INSTALL_FILES_PATH (в вашем примере). А константа означает - постоянное, неизменное значение. А вы же пытаетесь, предопределенную переменную $PROGRAMFILES засунуть в константу, а на этапе компиляции эта переменная еще не определена !

Читайте справку по NSIS ! и почитайте
[архив].: NSIS - все вопросы :.


А делать нужно так:





Код:

Код: Выделить всё

!define INSTALL_FILES_PATH "C:\Program files\Proga"
!define PRODUCT_NAME "Mega_Project"
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
Section "Install"
      SetOutPath "$INSTDIR"
File /r "${INSTALL_FILES_PATH}\*.*"
SectionEnd

Причем пути для забора файлов в инсталлятор прописываются только абсолютные или относительно компилируемого скрипта или компилятора NSIS
Аватара пользователя
MKN

Re: [архив].: NSIS - все вопросы :.

Сообщение MKN »

kotkovets,

Такой вопрос : Возможно ли реализовать при выборочной установке, гиперссылку на всплывающее или просто открывающееся новое окно с текстом-описанием выбранного компонента ?



Например, выбирая какой-нибудь компонент из секции установки, рядом с его описанием присутствует и фраза "Подробнее", являющееся своеобразной гиперссылкой, при клике на которой открывается окно с описанием этого выбранного компонента. И возможно ли в этом окне, кроме текстового описания, поместитть ещё и рисунок (рисунки) ?



Было бы очень полезно для визуализации выбора вариантов устанавливаемых Templates для DVD меню, скинов и многого другого,



Если такое не реально сделать средствами NSIS_а, то хотя бы реализовать открытие в отдельном окне (с заданными размерами) файла типа html или графического файла.



Вопрос 2 : Возможно ли реализовать выбор компонентов не с помощью галок чекбоксов, а с помощью стандартных кликабельных кнопок.

При нажатии на кнопку, чтобы менялся её цвет или на ней появлялся символ галки, свидетельствующий о выполнении ?

Или при нажатии на кнопку, сменялось одно изображение на другое, рядом находящееся с кнопкой, если не возможно это сделать на самой кнопке...

Типа, как это часто делают в AutоIT скриптах.
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата BSL:



необходимо дополнительно запросить к примеру порт. То есть как я понимаю перед установкой должно появиться окно с параметром. Как этого добиться?
[архив].: NSIS - все вопросы :.




Если Вы так хотите сделать, то нужно делать:

1) проверить, отмечена ли нужная секция

2) Если отмечена секция вызывать соответствующий диалог и вызывать при закрытии стр. выбора компонентов.

Самый простой пример, это с использованием плагина
DialogsEx


файлик DialogsEx.dll закидываем в C:\Program Files\NSIS\Plugins

и хедер dialogs.nsh закидываем в C:\Program Files\NSIS\Include


читать дальше »




Код:

Код: Выделить всё

!include "MUI2.nsh"
!include "dialogs.nsh"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE COMPONENTSLEAVE ; функция будет выполнена при закрытии стр. компонентов.
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
ShowInstDetails show
InstallDir "$EXEDIR"
OutFile Test.exe
Caption "Test"
Section "Port" SecPort
  MessageBox MB_OK "Номер выбраннога порта: $0" ;показываю в качестве примера значение $0
SectionEnd
Function COMPONENTSLEAVE
  ${If} ${SectionIsSelected} SecPort ;проверка выбрана ли нужная секция
    ${InputTextBox} "Окно выбора номера порта" "Введите номер порта в поле ввода..." "" "4" "" "" 0
    ;число 0 - в переменной $0 будет хранится введеное значение порта
    ;число 4 - соответствует максимально возможному количеству вводимых символов
    StrCmp $0 `` 0 +2 ;если в переменной $0 пустое значение возврат на стр. выбора компонентов
    Abort
  ${EndIf}
FunctionEnd
Аватара пользователя
MKN

Re: [архив].: NSIS - все вопросы :.

Сообщение MKN »

kotkovets спасибо, большое. Предложенный вариант работает, и для меня это выход.

Но возник дополнительный вопрос.

Возможно ли сделать так что после выбора компонентов, и нажатие кнопки "Далее", возникало не отдельное окно с контролом порт, а была бы следующая страница с контролом порт, А после этого уже установка.
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

BSL, вы можете "нарисовать" свою собственную страницу. Это очень просто. Посмотрите
этот пример
. Как я понял, вам нужно будет создать только одно текстовое поле и одну надпись.
Аватара пользователя
MKN

Re: [архив].: NSIS - все вопросы :.

Сообщение MKN »

hb860, и изучал эту ссылку. Загвоздка в том я смогу создать свою страницу, но как научить ее отображать её или нет в зависимости от выбранной секции.
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата BSL:



Загвоздка в том я смогу создать свою страницу, но как научить ее отображать её или нет в зависимости от выбранной секции
[архив].: NSIS - все вопросы :.




Делается точно также, но с небольшой "модификацией". Нечто подобное делал для себя, вот кусок скрипта:


читать дальше »




Код:

Код: Выделить всё

!include "MUI2.nsh"
!include "dialogs.nsh"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
  !define MUI_PAGE_CUSTOMFUNCTION_SHOW COMPONENTSSHOW
!insertmacro MUI_PAGE_COMPONENTS
  Page custom PortShow PortLeave
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
ShowInstDetails show
InstallDir "$EXEDIR"
OutFile Test.exe
Caption "Test"
Var Dialog
Var Label
Var Number
Var Port
Section /o "Port" SecPort
  MessageBox MB_OK "Номер выбраннога порта: $Port" ;показываю в качестве примера значение $0
SectionEnd
Function COMPONENTSSHOW ;функция при открытии стр. компонентов
   ${If} ${SectionIsSelected} SecPort ;если выбрана секция
      GetDlgItem $0 $HWNDPARENT 1
      ${NSD_SetText} $0 `$(^NextBtn)` ;переименовываем кнопку
   ${ElseIfNot} ${SectionIsSelected} SecPort ;если не выбрана секция
      GetDlgItem $0 $HWNDPARENT 1
      ${NSD_SetText} $0 `$(^InstallBtn)` ;переименовываем кнопку
   ${EndIf}
FunctionEnd
Function .onSelChange
   ${If} ${SectionIsSelected} SecPort ;если выбрана секция
      GetDlgItem $0 $HWNDPARENT 1
      ${NSD_SetText} $0 `$(^NextBtn)` ;переименовываем кнопку
   ${ElseIfNot} ${SectionIsSelected} SecPort ;если не выбрана секция
      GetDlgItem $0 $HWNDPARENT 1
      ${NSD_SetText} $0 `$(^InstallBtn)` ;переименовываем кнопку
   ${EndIf}
FunctionEnd
Function PortShow
  ${If} ${SectionIsSelected} SecPort ;проверка выбрана ли нужная секция
     nsDialogs::Create 1018
       Pop $Dialog
       ${NSD_CreateLabel} 0 0u 130u 13u "Введите в поле ввода номер порта:"
       Pop $Label
       ${NSD_CreateNumber} 0 13u 40% 13u "" ;ввод только цифры
       Pop $Number
       ${NSD_SetTextLimit} $Number 4 ;лимит на 4 символа
     nsDialogs::Show
  ${EndIf}
FunctionEnd
Function PortLeave
  ${NSD_GetText} $Number $Port ;считываем текст контрола
  StrLen $2 $Port ;считываем количество введенных символов с $Port в $2
  IntCmp $2 4 +2 0 0 ;если меньше или больше 4 символов - возврат назад
  Abort
FunctionEnd





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

Вернуться в «Автоматическая установка приложений»