在NSIS脚本中使用命令行参数实现依赖性检查

时间:2011-12-06 09:36:46

标签: installation dependencies command-line-arguments nsis silent

我的目标是在使用静默安装(/ S param)将NSIS命令行参数传递给复制设置时,知道是否使用任何检查或代码snipp来确定是否存在某种依赖性。

NSIS样本:http://nsis.sourceforge.net/Get_command_line_parameter_by_name

例如,如果我有三个参数:Setup.exe / S param1 =“”param2 =“”param3 =“”

如何查看以下secanrio:

${if} <Param1 is passed to Setup.exe> 
  <Param2 must ALSO be passed to Setup.exe>
${else}
  <Error message notifiing that Param1 is present, but dependent Param2 param is missing in CMD parameters>

谢谢!

我真的希望你至少能分享代码snipp ...如果不是完整的功能代码。

1 个答案:

答案 0 :(得分:0)

outfile test.exe
requestexecutionlevel user
silentinstall silent ;always force silent in this sample
!include LogicLib.nsh
!include FileFunc.nsh

Function StripOptPrefix
Exch $0
Push $1
StrCpy $1 $0 1
${If} $1 == "="
${OrIf} $1 == ":"
    StrCpy $0 $0 "" 1
${EndIf}
Pop $1
Exch $0
FunctionEnd
!macro StripOptPrefix var
Push ${var}
call StripOptPrefix
Pop ${var}
!macroend

Section
${GetParameters} $0
${If} $0 == ""
    ;No parameters, lets run the tests
    ExecWait '"$exepath" /param1=foo'
    ExecWait '"$exepath" /param1=foo /param2=bar'
${Else}
    ${GetOptions} $0 "/param1" $1
    ${If} ${Errors}
        # /param 1 not used, do nothing?
    ${Else}
        ${GetOptions} $0 "/param2" $2
        ${If} ${Errors}
            MessageBox mb_iconstop "Missing /param2, required by /param1"
            Quit
        ${Else}
            !insertmacro StripOptPrefix $1
            !insertmacro StripOptPrefix $2
            MessageBox mb_ok "1=$1$\n2=$2"
        ${EndIf}
    ${EndIf}
${EndIf}
SectionEnd