NSIS - пропустить определенные диалоги, используя аргументы командной строки? - PullRequest
0 голосов
/ 24 ноября 2018

Есть ли способ заставить установщик NSIS пропускать определенные диалоговые окна?

У него есть эти аргументы командной строки

/S, /NCRC и /D=dir

Хотя /S и /NCRC могут использоваться в автоматическом и автоматическом режимах, существуют ли аргументы командной строки, чтобы программа установки пропускала определенные диалоговые окна в программе установки и отображала остальную часть диалога?Например.пропустите диалог приветствия и следующие два диалога и перейдите к четвертому.

1 Ответ

0 голосов
/ 24 ноября 2018

/ S, / NCRC и / D = - это единственные параметры установщика со встроенной поддержкой, все остальное, что вам нужно сделать самостоятельно.

Страницы можно пропускать , вызывая Abort на странице предварительного обратного вызова.Также возможно перейти на определенное количество страниц .Макрос GetOptions может использоваться для анализа командной строки.

OutFile Test.exe
RequestExecutionLevel user
InstallDir $Temp

!include LogicLib.nsh
!include FileFunc.nsh

Page License LicPre
Page Components CmpPre
Page Directory "" DiShow
Page InstFiles

Var SkippedL
Var SkippedC

!macro AbortIfCmdlineParam Switch Var
${GetParameters} $0
ClearErrors
${GetOptions} $0 "${Switch}" $0
${IfNot} ${Errors}
    ${If} ${Var} = 0
        StrCpy ${Var} 1
        Abort
    ${EndIf}
${EndIf}
!macroend

Function LicPre
!insertmacro AbortIfCmdlineParam "/SkipL" $SkippedL
FunctionEnd

Function CmpPre
!insertmacro AbortIfCmdlineParam "/SkipC" $SkippedC
FunctionEnd

Function DiShow
# Disable back button if both pages skipped, this is optional
${If} $SkippedL <> 0
${AndIf} $SkippedC <> 0
    GetDlgItem $0 $hwndparent 3
    EnableWindow $0 0
${EndIf}
FunctionEnd

Section
SectionEnd

Запускать как Test /SkipL /SkipC, чтобы пропустить оба.

Или:

OutFile Test.exe
RequestExecutionLevel user
InstallDir $Temp

!include LogicLib.nsh
!include FileFunc.nsh

Page License "" LicShow
Page Components
Page Directory
Page InstFiles

Function LicShow
Var /Global HasSkipped
${GetParameters} $0
ClearErrors
${GetOptions} $0 "/Skip=" $0
${IfNot} ${Errors}
${AndIf} $0 < 4 ; Don't let user skip InstFiles
${AndIf} $HasSkipped = 0
    StrCpy $HasSkipped 1
    SendMessage $HWNDPARENT 0x408 $0 ""
${EndIf}
FunctionEnd


Section
SectionEnd

...и беги как Test /Skip=2.

...