代码之家  ›  专栏  ›  技术社区  ›  Codename K

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

  •  0
  • Codename K  · 技术社区  · 7 年前

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

    它有这些命令行参数,

    /S /NCRC /D=dir

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   Anders    7 年前

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

    Pages can be skipped Abort 在预回调页面中。也可以 jump forward a specific number of pages . 这个 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 .