NSIS - 使用命令行参数跳过某些对话框?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSIS - 使用命令行参数跳过某些对话框?相关的知识,希望对你有一定的参考价值。

有没有办法让NSIS安装程序跳过某些对话框?

它有这些命令行参数,

/S/NCRC/D=dir

虽然/S/NCRC可以用于静默和无人值守模式,但有没有命令行参数使安装程序跳过安装程序中的某些对话框并显示对话框的其余部分?例如。跳过欢迎对话框和接下来的两个对话框,然后转到第四个对话框。

答案

/ S,/ NCRC和/ D =是唯一具有内置支持的安装程序参数,您必须自己处理的任何其他内容。

Pages can be skipped通过在页面预调用中调用Abort。也有可能jump forward a specific number of pagesGetOptions宏可用于解析命令行。

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的身份运行。

以上是关于NSIS - 使用命令行参数跳过某些对话框?的主要内容,如果未能解决你的问题,请参考以下文章

使用 electron-builder NSIS 安装程序安装后运行时如何传递命令行参数

如何读取提供给卸载程序的命令行参数?

maven:如何通过命令行选项跳过某些项目中的测试?

如何跳过 NSIS“组件”页面?

出现NSIS怎么办?

main中的python命令行参数,跳过脚本名称