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

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

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

Сообщение kotkovets »

Цитата Sidril:



Большое спасибо. вроде примерно понял.

Вы привели пример 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 в первой секции правильный... Довольно сумбурная схема... Как бы так сделать чтобы волков накормить, и овец сохранить?
[архив].: NSIS - все вопросы :.






Решил вот тоже побаловаться с этим плагинчиком для реального прогресса. По командам Вашего примера выходит, что на команде RealProgress::AddProgress /NOUNLOAD 60 прогресс уже будет на 100%, ибо:



Могу Вам сказать, что команда RealProgress::AddProgress /NOUNLOAD XX отвечает не за установление прогресса на определённом проценте, а за добавление процентов прогресса.

Т.е Вы ставите скажем RealProgress::AddProgress /NOUNLOAD 20 (где 20 - прибавляемый процент). Далее ставите RealProgress::AddProgress /NOUNLOAD 40, прогресс-бар будет на уровне 60%, а не 40%, т.к стартовую величину задала предыдущая команда. 20+40=60.



Команда же RealProgress::FileProgress XX ориентируется на постепенное продвижение до заданного параметра (XX - процент продвижения до которого двигается прогресс бар). Т.е скажем вы установили RealProgress::FileProgress 20. В момент установки (в зависимости от ваших команд) идёт извлечение файла, пока идёт это извлечение - индикатор прогресса постепенно продвигается до 20%.



А за установление прогресса на определённом проценте отвечает команда RealProgress::SetProgress /NOUNLOAD 10 (где 10 - процент прогресса). На любом этапе установки Вы можете выставить эту команду и прогресс бар будет заполнен на указанный вами процент.



Рекомендую грамотно смешивать эти возможности.

Если продуманно подойти, то прогресс-бар будет максимально реальным.

Ну а автору плагина (Afrow UK) большой респект.
Аватара пользователя
diakov

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

Сообщение diakov »

Paval,
Цитата Paval:



Пишу инсталяцию на nsis. В дополнение к основному продукту нужно еще поставить пару отдельных программ. Я их упаковываю в свой инсталятор. И прописываю на исполнение ExecWait.

Вроде объяснил понятно. Теперь, как их вызвать в пассивном режиме и прописать путь для установки.
[архив].: NSIS - все вопросы :.






Код:

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

ExecWait '"$INSTDIR\VCRedist_x64.exe" /q:a /c:"msiexec /i VCRedist.msi /qn"'

или





Код:

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

ExecWait '"$INSTDIR\VCRedist_x64.exe" /q:a /c:"msiexec /i VC_Red.msi /qn"'
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Товарищи подскажите оптимальное решение таких задач:



1. Нужно скопировать (распаковать) файл в системную папку, при соблюдении условия, если в ней нет одноименного файла более новой версии.



2. Соответсвенно при деинсталляции комманда на удаление этого файла, если он имеет определенную версию (файл новой версии не должен удаляться).



Задача возникла из-за того, что две программы от одного производителя ставят драйвера службы дефрагментации, причем в одной программе версия более новая.
Аватара пользователя
diakov

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

Сообщение diakov »

kotkovets, такой вопрос





Код:

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

Section "Установить надстройку"
   ${If} $Check5 == 1
    CreateDirectory "$PROGRAMFILES\Minilyrics"
     SetOutPath "$PROGRAMFILES\Minilyrics"
     File /r "D:\Aimp\MiniLyric\*.*"
     CreateDirectory "$APPDATA\MiniLyrics"
  SetOutPath "$APPDATA\MiniLyrics"
    File /r "D:\Aimp\MiniLyrics\*.*"
     ${If} ${RunningX64}
     SetOutPath "$INSTDIR\Plugins"
     File /r "D:\Aimp\gen_MiniLyrics.dll"
     File /r "D:\ystanovka\MLPlugin.ini"
     ${Else}
     SetOutPath "$INSTDIR\Plugins"
     File /r "D:\Aimp\MLPlugin.ini"
     File /r "D:\Aimp\gen_MiniLyrics.dll"
     ${EndIf}
         SetShellVarContext all
     WriteRegStr HKCU "MUI_LANGDLL_REGISTRY_KEY" "MUI_LANGDLL_REGISTRY_VALUENAME" "1033"
     WriteRegStr HKCU "Software\MiniLyrics" "InstallerLanguage" "1033"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Запустить Minilyrics.lnk" "$PROGRAMFILES\Minilyrics\Minilyrics.exe"
  ${EndIf}
SectionEnd

Не создает папку $APPDATA\MiniLyrics и не копирует туда D:\Aimp\MiniLyrics\*.* что тут не так?
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата:



такой вопрос



Правильнее так:


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




Код:

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

Section "Установить надстройку"
   SetShellVarContext all 
   ${If} $Check5 == 1
       SetOutPath "$PROGRAMFILES\Minilyrics"
       File /r "D:\Aimp\MiniLyric\*.*"
       SetOutPath "$APPDATA\MiniLyrics"
       File /r "D:\Aimp\MiniLyrics\*.*"
       ${If} ${RunningX64}
          SetOutPath "$INSTDIR\Plugins"
          File "D:\Aimp\gen_MiniLyrics.dll"
          File "D:\ystanovka\MLPlugin.ini"
       ${Else}
          SetOutPath "$INSTDIR\Plugins"
          File "D:\Aimp\MLPlugin.ini"
          File "D:\Aimp\gen_MiniLyrics.dll"
       ${EndIf}
       WriteRegStr HKCU "MUI_LANGDLL_REGISTRY_KEY" "MUI_LANGDLL_REGISTRY_VALUENAME" "1033"
       WriteRegStr HKCU "Software\MiniLyrics" "InstallerLanguage" "1033"
       CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Запустить Minilyrics.lnk" "$PROGRAMFILES\Minilyrics\Minilyrics.exe"
  ${EndIf}
SectionEnd





А может надо

Код:

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

SetShellVarContext current
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата kotkovets:



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




Вот это надо Изображение

Ушёл читать.

Спасибо.
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

kotkovets, что не получается...



Выбираю оригинал (пофиг тихая/не тихая) запускается обычная установка.

Выбираю mod (пофиг тихая/не тихая) запускается mod в тихом режиме.

Такие вот пироги...

Вот часть скрипта:


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




Код:

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

SectionGroup /e "Тип установки"
Section /o "Обычная" secNormal
SectionEnd
Section "Тихая" secSilent
SectionEnd
SectionGroupEnd
Section "Оригинал" secOriginal
 SectionGetFlags ${secNormal} $0
 ${If} $0 == 1
  ExecWait '$\"${OutDir}\setup.exe$\" /pSKIPPRODUCTCHECK=1'
 ${Else}
  ExecWait '$\"${OutDir}\setup.exe$\" /pSKIPPRODUCTCHECK=1 /qn'
 ${EndIf}
SectionEnd
Section /o "Mod" secMod
 SectionGetFlags ${secNormal} $0
 ${If} $0 == 1
  ExecWait '$\"${OutDir}\setup.exe$\" /pSKIPPRODUCTCHECK=1 /v"TRANSFORMS=ksospc.ru.mst"'
 ${Else}
  ExecWait '$\"${OutDir}\setup.exe$\" /pSKIPPRODUCTCHECK=1 /v"TRANSFORMS=ksospc.ru.mst /qn"'
 ${EndIf}
SectionEnd
Function .onSelChange
  !insertmacro StartRadioButtons $1
    !insertmacro RadioButton ${secNormal}
    !insertmacro RadioButton ${secSilent}
  !insertmacro EndRadioButtons
  !insertmacro StartRadioButtons $2
    !insertmacro RadioButton ${secOriginal}
    !insertmacro RadioButton ${secMod}
  !insertmacro EndRadioButtons
FunctionEnd
Function .OnInit
 StrCpy $1 ${secSilent}
 StrCpy $2 ${secOriginal}
FunctionEnd







"Рожденный ползать - летать не может!"

Видать несудьба мне с этим NSIS Изображение
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

kotkovets,

Помогите разобраться с автозакрытием программ

Нужно перед установкой Орбита закрыть браузеры



В скрипте:



!include WinMessages.nsh



Function CloseProgram

Exch $1

Push $0

loop:

FindWindow $0 $1

IntCmp $0 0 done

#SendMessage $0 ${WM_DESTROY} 0 0

SendMessage $0 ${WM_CLOSE} 0 0

Sleep 100

Goto loop

done:

Pop $0

Pop $1

FunctionEnd





Function .onInit

;

loop:

FindWindow $0 "IEFrame"

IntCmp $0 0 done

IsWindow $0 0 done

System::Call 'user32::PostMessageA(i,i,i,i) i($0,${WM_CLOSE},0,0)'

Sleep 100

Goto loop

done:

;

Push "MozillaWindowClass"

Call CloseProgram



Push "OperaWindowClass"

Call CloseProgram

;

FunctionEnd



IE закрывается , а FireFox и Opera нет.

Классы заголовков смотрел в Win32Spy.
Ответить

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