Показать полную графическую версию : [архив].: NSIS - все вопросы :.
kotkovets, все получилось именно с SetShellVarContext current! Спасибо!
Подскажи пожалуйста как организовать выбор языка самого установщика при его запуске? (допустим сделать его (украинским,английски и русским). И еще раз спасибо что ты есть!
kotkovets
19-02-2012, 12:50
diakov,
cмотри в примерах Examples\Modern UI\MultiLanguage.nsi
kotkovets
19-02-2012, 13:15
diakov, смотри еще здесь
http://forum.oszone.net/post-1553443-903.html
wolkow70
20-02-2012, 16:14
Function .OnInit
ExpandEnvStrings $INSTDIR "%SYSTEMDRIVE%\App"
FunctionEnd
InstallDir "$INSTDIR" »
Сделал таким образом.
В результате директория установки нормально отображается в строке инсталлятора, но не работает ключ /D=путь установки.
Пробовал также так:
Var SysDrive
Function .OnInit
StrCpy $SysDrive $WINDIR 2
FunctionEnd
InstallDir "$SysDrive\app"
В строке не отражается буква диска, только папка (не красиво).
Мне нужно сделать, чтобы и в строке нормально отражалось, и ключ /D нормально работал.
Подмогнете?
kotkovets
20-02-2012, 17:01
Мне нужно сделать, чтобы и в строке нормально отражалось, и ключ /D нормально работал. »
таким способом, нет, у вас всегда предопределяется условие
выбора пути установки в функции .OnInit
wolkow70
20-02-2012, 17:23
таким способом, нет, у вас всегда предопределяется условие
выбора пути установки в функции .OnInit »
Если сделать так:
InstallDir "$SysDrive\app" ,
то не предопределяется, но почему-то букву диска не отображает, только саму папку. Может надо добавить что-то вроде того "$\ ?
kotkovets, а как с помощью LangString задать текст описания радиобутонов и чекбоксов на кастомной страничке?
Все разобрался тока не знеаю правильно ли но работает)) вот так вот
В самой функции кастомной странички пишу "$(RadioButton)"
Function PageInit
!insertmacro MUI_HEADER_TEXT "Выбор типа и компонентов установки" "..."
nsDialogs::Create 1018
Pop $dlg
${NSD_CreateLabel} 0u 0u 120u 12u "Пожалуйста, сделайте выбор:"
Pop $Label
;;
${NSD_CreateRadioButton} 0u 15u 150u 12u "$(RadioButton)"
Pop $RadioButton
${NSD_SetState} $RadioButton 1 ;делаем радиобутон отмеченным
${NSD_OnClick} $RadioButton RadioButton ;событие отметки радиобутона
а перед этим пишу
LangString RadioButton ${LANG_RUSSIAN} "значение"
LangString RadioButton ${LANG_ENGLISH} "значение"
kotkovets, теперь такая загвоздка как на страничке лицензия указать файлы под конкретный язык, пробовал так:
!insertmacro MUI_PAGE_LICENSE "$(LICENSE)"
LangString LICENSE ${LANG_RUSSIAN} "${NSISDIR}\COPYING.rtf"
LangString LICENSE ${LANG_ENGLISH} "${NSISDIR}\COPYING1.rtf"
LangString LICENSE ${LANG_UKRAINIAN} "${NSISDIR}\COPYING2.rtf"
Не получается...вообще ничего не отображает на странице лицензии...
kotkovets
22-02-2012, 00:26
diakov, не получится страничка лицензии, подгрузка файла в окно лицензии - это время компиляции,
а тебе нужно время установки - на подгрузку нужного файла в зависимости от языка установщика.
попробуй плагом: http://nsis.sourceforge.net/CustomLicense_plug-in
!addplugindir .
!include "MUI2.nsh"
Name "BigLicense-Test"
OutFile "biglictest.exe"
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_SHOW "LICENSE_SHOW" ;эту строку не перемещать!!!
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\COPYING" ;эту строку не менять!!!
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "russian"
Function LICENSE_SHOW
InitPluginsDir
${If} $LANGUAGE == 1049 ;если русский язык установщику
File "/oname=$PLUGINSDIR\info.rtf" "Text\info_ru.rtf"
${ElseIf} $LANGUAGE == 1033 ;если английский язык установщика
File "/oname=$PLUGINSDIR\info.rtf" "Text\info_eng.rtf"
${EndIf}
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 1000
CustomLicense::LoadFile "$PLUGINSDIR\info.rtf" $0
FunctionEnd
Section
SectionEnd
Добрый день.
Изучал справку NSIS, но к сожалению не нашёл ответа на интересующий меня вопрос. Если вас не затруднит, пожалуйста, подскажите как можно организовать реальный прогресс установки на странице инсталляции? Просто у меня на данный момент получается так, что инсталляция реально не завершена и на половину, а прогресс-бар заполняется уже на 90%.
Поискав плагины на эту тему, обнаружил что имеется NSIS Real Plugin (http://nsis.sourceforge.net/RealProgress_plug-in). Но моя криворукость не позволяет мне понять принцип работы данного плагина... Быть может в стандартных средствах NSIS есть более простой способ решения моей проблемы?
Спасибо!
kotkovets
25-02-2012, 16:13
Изучал справку NSIS, но к сожалению не нашёл ответа на интересующий меня вопрос. Если вас не затруднит, пожалуйста, подскажите как можно организовать реальный прогресс установки на странице инсталляции? Просто у меня на данный момент получается так, что инсталляция реально не завершена и на половину, а прогресс-бар заполняется уже на 90% »
Проблема в Вашем скрипте, может макросе, идет прерывание установки - ИМХО на 100% !
Ищите команды - abort, return - наверняка по неправильным условия срабатывают, а может и правильным...:)
kotkovets
Да нет, установка не прерывается. Дело в том что прогресс установки ориентируется на выполнение команд скрипта, т.е к примеру в скрипте 500 команд, если выполнено уже 450 строк, то прогресс-бар заполнится на 90%. Меня это не устраивает, мой инсталлятор построен на принципах запуска и ожидания конца работы внешних приложений, это всё прописано ближе к концу скрипта, поэтому и показывает прогресс 90%... Но работа внешних приложений длится приличное кол-во времени, а прогресс бар как за 5 секунд дошёл до 90% и потом уже не двигается. Установка продолжается - прогресс бар стоит.
Нужно как-то настраивать прогресс-бар... В справочнике по NSIS тоже увы нет примеров для этого. Как-то странно, вроде нормальный прогресс установки - элементарная вещь, а такие вот проблемы (
kotkovets
25-02-2012, 18:06
Установка продолжается - прогресс бар стоит »
Прогрecc бар двигается только по внутренним командам, сообщениям - но не запускам внешних приложений.
попробуйте между перед каждым запуском приложения прописать:
DetailPrint "Установка название приложения"
А ну последней командой в последней секции
DetailPrint "готово"
Можно конечно получить последними командами дескриптор прогресса, найти верхний предел и установить
На таких блоках поставлен запуск и ожидание внешних приложений:
SetDetailsPrint textonly
DetailPrint "Установка основных компонентов"
SetDetailsPrint listonly
SetOutPath "$INSTDIR"
ExecWait '"$INSTDIR\install_old.exe"'
SetDetailsPrint textonly
DetailPrint "Установка дополнительных компонентов"
SetDetailsPrint listonly
SetOutPath "$INSTDIR"
ExecWait '"$INSTDIR\install_new.exe"'
Задача передо мной стоит чтоб в тот момент когда идёт установка основных компонентов прогресс бар был на 30%, когда начинается установка дополнительных компонентов - на 40% и так далее... Но так понимаю в NSIS это архисложная задача (
kotkovets
25-02-2012, 23:15
Пробуйте так, хотя думаю врядли, nsis тоже двигает прогресс
!macro SETPOS position
FindWindow $R9 "#32770" "" $HWNDPARENT
GetDlgItem $R9 $R9 1004
Intop $R8 300 * ${position}
SendMessage $R9 0x402 $R8 0
!macroend
Section
!insertmacro SETPOS 0 ;устанавливаем на 0%.
SetDetailsPrint textonly
DetailPrint "Установка основных компонентов"
SetDetailsPrint listonly
SetOutPath "$INSTDIR"
ExecWait '"$INSTDIR\install_old.exe"'
!insertmacro SETPOS 50 ;устанавливаем на 50%.
SetDetailsPrint textonly
DetailPrint "Установка дополнительных компонентов"
SetDetailsPrint listonly
SetOutPath "$INSTDIR"
ExecWait '"$INSTDIR\install_new.exe"
!insertmacro SETPOS 100 ;устанавливаем на 100%.
SectionEnd
Спасибо за вариант.
Жаль, но не помогает... Прогресс всё равно стремглав бежит вперёд, ориентируюясь на команды скрипта.
Нужно установить тотальный контроль за прогрессом...
Если вам не сложно, посмотрите что за зверь такой Real Progress plugin. Как его можно использовать в моём случае.
Думаю это не должно пройти за зря, т.к можно потом для пользователей отобразить пример в русской справке по NSIS.
Кстати, спасибо вам за этот справочник. Незаменимая вещь в хозяйстве. Надеюсь проект справки не заброшен и будет обновляться - это в качестве пожелания.
________________________________
Была у меня также мысль (подсмотрел в каком-то из установщиков) относительно того, чтобы когда начинают выполняться функции запуска и ожидания - в этот момент всплывает долнительный мини-прогресс бар где и показывался ход установки компонентов. Но опять же, нигде не нашёл примеров кода по прогрессу.
wolkow70
26-02-2012, 13:31
kotkovets, Подскажите пожалуйста возможно ли сделать такое:
Есть группа секций "Установить Winamp Agent"
В одной из секций опция "Запустить WinampAgent после установки"
Exec "$INSTDIR\winampa.exe"
Как можно реализовать, что бы при установке галочки на чебоксе действительно агент запускался после успешной установки?
Если прописать в функцию Function .onInstSuccess, то как реализовать условие значения в секции?
kotkovets
26-02-2012, 14:34
Есть группа секций "Установить Winamp Agent"
В одной из секций опция "Запустить WinampAgent после установки"
Exec "$INSTDIR\winampa.exe"
Как можно реализовать, что бы при установке галочки на чебоксе действительно агент запускался после успешной установки?
Если прописать в функцию Function .onInstSuccess, то как реализовать условие значения в секции? »
xex...:), проверяете, считываете состояние секции и наличие файлика собственно.
SectionGroup /e "some stuff"
Section "install"
SectionEnd
Section "exec" SEC1
SectionEnd
SectionGroupEnd
Function .onInstSuccess
${If} ${SectionIsSelected} ${SEC1}
${AndIf} ${FileExists} "$INSTDIR\winampa.exe"
Exec "$INSTDIR\winampa.exe"
${EndIf}
FunctionEnd
Нужно установить тотальный контроль за прогрессом...
Если вам не сложно, посмотрите что за зверь такой Real Progress plugin. Как его можно использовать в моём случае. »
Да вроде бы элементарно...допустим у вас есть 5 блоков команд,
т.е после каждого блока команды двигаем на 20%
и так до 100%, т.е рассчитываете сколько у вас блоков однотипных команд и
сотню делите на кол-во блоков однотипных команд.
Section
RealProgress::FileProgress /NOUNLOAD 0
Sleep 300 ;[блок команд]
RealProgress::FileProgress /NOUNLOAD 20 ;установка прогресса на 20%.
Sleep 300 ;[блок команд]
RealProgress::FileProgress /NOUNLOAD 40
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD 60
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD 80
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD 100 ;установка прогресса на 100%.
SectionEnd
## Unload the plugin so that it can be deleted!
Function .onGUIEnd
RealProgress::Unload
FunctionEnd
Большое спасибо. вроде примерно понял.
Вы привели пример File Progress
Там также есть Detail и Gradual progress. Неплохо бы узнать чем они отличаются.
В моём установщике несколько компонентов, которые устанавливаются по желанию клиента. Т.е несколько секций в скрипте имеется... Как в этом случае сохранить адекватность продвижения прогресс бара, если заранее не известно будет ли клиент устанавливать тот или иной компонент или нет. Первая секция обязательна к установке остальные на выбор.
На примере двух секций.
;__________________________________________________
Section "Ключевые составляющие" Sec1
SectionIn RO
RealProgress::FileProgress /NOUNLOAD 0
Sleep 300 ;[блок команд]
RealProgress::FileProgress /NOUNLOAD 20 ;установка прогресса на 20%.
Sleep 300 ;[блок команд]
RealProgress::FileProgress /NOUNLOAD 40
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD 60
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD 80
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD 100 ;установка прогресса на 100%.
SectionEnd
Section "Авторские обновления" Sec2
Sleep 300 ;[блок команд]
RealProgress::AddProgress /NOUNLOAD ??? ;какой параметр прогресса должен быть?
SectionEnd
;__________________________________________________
Какой параметр прогресса должен быть в случае если клиент захочет установить "Авторские обновления"? По скрипту выходит что после выполнения первой секции прогресс-бар будет на 100%, а установка не завершится, т.к пойдёт выполнения следующей секции. С другой стороны - если клиент не захочет устанавливать "Авторские обновления", то тогда прогресс 100 в первой секции правильный... Довольно сумбурная схема... Как бы так сделать чтобы волков накормить, и овец сохранить?:)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC