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

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

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

Сообщение BuZzOFF »

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 »

MKN, что мешает заменить команду DetailPrint командой FileWrite?







Код:

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

Function .onInit
FileOpen $R0 "$EXEDIR\kav_song.txt" w
FileWrite $R0 "$\n$\r"
call test
FileClose $R0
quit
FunctionEnd
!macro c
    StrCpy $2 ""
    Call PrintBeer
!macroend
Function PrintBeer
    IntCmp $1 0 no "" ""
    StrCpy $2 "$2$1"
    Goto +2
no:
    StrCpy $2 "$2No"
    StrCpy $2 "$2 bottle"
    IntCmp $1 1 nos "" ""
    StrCpy $2 "$2s"
nos:
    StrCpy $2 "$2 of beer"
FunctionEnd
Function test
    StrCpy $1 99
loop:
    !insertmacro c
    StrCpy $2 "$2 on the wall, "
    Call PrintBeer
    FileWrite $R0 "$\n$2."
    FileWrite $R0 "$\nTake one and pass around,"
    IntOp $1 $1 - 1
    !insertmacro c
    FileWrite $R0 "$\n$2 on the wall."
    FileWrite $R0 "$\n"
    IntCmp $1 0 "" loop loop
    FileWrite $R0 "$\nNo more bottles of beer..."
    FileWrite $R0 "$\nGo to the store and buy some more..."
    FileWrite $R0 "$\n99 bottles of beer."
FunctionEnd




Цитата MKN:



Но всё же не даёт мне покоя, как из цикла извлекать значения каждого прохода (в файл ли или в переменные) ?
[архив].: NSIS - все вопросы :.




Поподробнее...Приведите пример цикла, можно же прибавлять просто к переменной, не? Изображение
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

Цитата K.A.V.:



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




вот к примеру, упоминавшийся уже :



Код:

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

${for} $1 1 10
     MessageBox MB_OK "$1" IDOK
${next}

Каким образом записать последовательность значений отсчёта

а - в файл ?

b - в переменные , где каждое значение (от 1 до 10 в данном примере), "прирощенное" в каждом отсчёте цикла, записывается в свою переменную ? Т.е. небходимы 10 переменных.
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

BuZzOFF, Чет у вас извращенная логика, проще-проще, вот на кой черт нужно еще:

silent mode и normal mode && silent original и normal original?

Не проще сделать всего лишь: silent mode && silent original, при оболочке - выбор, че ставить,

при тихом режиме заводить ключом ком.строки: silent mode или silent original

Хозяин барин:


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




Код:

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

SectionGroup /e "Тип установки"
Section /o "Обычная" secNormal
SectionEnd
Section "Тихая" secSilent
SectionEnd
SectionGroupEnd
Section "Оригинал" secOriginal
 ${If} ${SectionIsSelected} ${secSilent}
       MessageBox MB_OK "Original [Silent]" IDOK
 ${Else}
       MessageBox MB_OK "Original [Normal]" IDOK
 ${EndIf}
SectionEnd
Section /o "Mod" secMod
 ${If} ${SectionIsSelected} ${secNormal}
      MessageBox MB_OK "Mod [Normal]" IDOK
 ${Else}
       MessageBox MB_OK "Mod [Silent]" IDOK
 ${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





wolkow70, скрипт какой-то древний китайский, покрыт несвежей пылью(но рабочий):

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

Вообще пускай юзер думает, че ему надо-то, поэтому лучше при запущенном браузере, сообщение

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


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




Код:

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

!macro CloseProgram NameProgramm
   ${Do}
      Sleep 200
      FindWindow $0 "${NameProgramm}"
      ${IfThen} $0 == 0 ${|}${Break}${|}
      MessageBox MB_OK "Окошко -${NameProgramm}-" IDOK
      SendMessage $0 ${WM_CLOSE} 0 0 ;послать окну сообщение WM_CLOSE
      SendMessage $0 ${WM_DESTROY} 0 0 ;разрушить окно
   ${Loop}
!macroend
Function CloseProgram
   System::Store S
   ${Do}
      Sleep 200
      FindWindow $0 "IEFrame"
      ${IfThen} $0 == 0 ${|}${Break}${|}
      ;послать сообщение немедленно, вне очереди cообщений оконной поцедуры
      MessageBox MB_OK "ослика окошко найдено" IDOK
      System::Call "user32::PostMessage(ir0,i${WM_CLOSE},i0,i0)"
   ${Loop}
   !insertmacro CloseProgram "OperaWindowClass"
   !insertmacro CloseProgram "MozillaWindowClass"
   System::Store L
FunctionEnd
Function .onInit
   Call CloseProgram
FunctionEnd
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

Существует ли в NSIS ключ, наподобие ключа из InnoSetup /silent, но не /verysilent, чтобы процесс установки не был скрыт, как ключём /S, а шёл автоматически, без возможности отмены, но видимо?
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

wolkow70, Это нормально, пробуйте так, более надежно и быстрее.

FindWindow вызывается в каждом цикле 50 раз с задержкой 2мс, при найденном окне - прерывание цикла.



Код:

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

!macro CloseProgram NameProgramm
  ${For} $1 1 50
     FindWindow $0 "${NameProgramm}"
     ${If} $0 != 0
        MessageBox MB_OK "Окошко -${NameProgramm}-" IDOK
        System::Call "user32::PostMessage(ir0,i${WM_CLOSE},i0,i0)"
        ${Break}
     ${EndIf}
     Sleep 2
  ${Next}
!macroend
Function CloseProgram
   System::Store S
   !insertmacro CloseProgram "IEFrame"
   !insertmacro CloseProgram "OperaWindowClass"
   !insertmacro CloseProgram "MozillaWindowClass"
   System::Store L
FunctionEnd

т.е при не найденных окнах - окошко установщика появится где то через 300 мс (если сообщение убрать)

При желании оттачивания надежности, время задержки можно увеличить и количество вызовов FindWindow
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

kotkovets,

Насколько подобная процедура применима к процессу деинсталляции программы? То есть, при удалении программы тоже надо закрывать браузеры.
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

Цитата alert30:



BigBoo, Типы инсталляторов
[архив].: NSIS - все вопросы :.




Там говорится только о ключе /S и /D, то есть хотите сказать, что кроме этих других ключей не существует?
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата BigBoo:



Там говорится только о ключе /S и /D, то есть хотите сказать, что кроме этих других ключей не существует?
[архив].: NSIS - все вопросы :.




Других ключей больше нету. Попробуйте погуглить и Вы увидите те же самые ключи /S /D.
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

Цитата BigBoo:



Существует ли в NSIS ключ, наподобие ключа из InnoSetup /silent, но не /verysilent, чтобы процесс установки не был скрыт, как ключём /S, а шёл автоматически, без возможности отмены, но видимо?
[архив].: NSIS - все вопросы :.




не существует, но легко их сделать самому, и применить свойство прыжкам по страничкам.


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




Код:

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

!include "MUI2.nsh"
!include "FileFunc.nsh"
!define MUI_CUSTOMFUNCTION_GUIINIT MUIGUIInit
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
OutFile "proga.exe"
ShowInstDetails show
InstallDir $EXEDIR
var vSilent
Function MUIGUIInit
  ClearErrors
  ${GetOptions} "$CMDLINE" "/silent" $R0
  StrCpy $vSilent 0
  IfErrors +3
  StrCpy $vSilent 1
  SendMessage $HWNDPARENT 0x408 3 0 ;прыжок на 3 страничку установки.
FunctionEnd
Section "install_section"
    MessageBox MB_ICONINFORMATION|MB_OK "$INSTDIR" IDOK
SectionEnd
Section
 StrCmp $vSilent 1 0 +2
 Quit
SectionEnd





Запуск с ключом /silent - заставляет установщик перенестись на страничку установки.

Почему на 3 страничку, стандартных страничек приветствия и финиша в нсис нет!, значит их не учитываем,

остается только по скрипту 3 странички:

1 выбор директории

2 выбор компонентов

3 страничка установки - на страничку эту и ведем счет.

создаем "последнюю" секцию по скрипту, что бы не показывалась страничка финиша.


Цитата diakov:



kotkovets скажи пожалуйста, вот на счет описанного тобой плагина InvokeShellVerb Plugin for NSIS и хедера InvokeShellVerb.nsh вот если делать так ${PinToPusk} "$WINDIR\notepad.exe" то название закрепленного ярлыка так и есть notepad.exe как то не эстетично, возможно как то задать иное название?
[архив].: NSIS - все вопросы :.




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

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