NSIS中的循环异常

时间:2012-10-10 12:20:30

标签: for-loop nsis

我有这样的NSIS代码:

    ;Installer Sections

    var /GLOBAL f1m

    Function GetXML
     StrCpy $path "/A/B/C/"
     StrCpy $path "$path$R1"
     ${UpdateXml} "http://127.0.0.1/denwer/update.xml" $path $f1m
    FunctionEnd

    Function DownloadFiles
     metadl::download /RETRYTIME=2 /MAXTRIES=2 /MD5 $f1m http://127.0.0.1/some.exe some.exe
     Pop $R0 ;Get the return value
     StrCmp $R0 "success" +3
     MessageBox MB_OK "Download failed: $R0"
    FunctionEnd

    Section "Dummy Section" SecDummy
    ...
    ReadRegStr $curver HKCU "Software\SomeSoft" "ver"
    ...
    ${For} $R1 1 10
     Call GetXML
     Call DownloadFiles
    ${Next}
    ...
SectionEnd

当for循环中的程序运行" DowloadFiles"功能它不是在for循环的开始。它只是回到ReadRegStr命令并且总是得到$ f1m变量的相同值并且卡在一个循环上。

这个行动的原因是什么?

2 个答案:

答案 0 :(得分:1)

DonwloadFiles函数中,我看到了一个可疑的

StrCmp $R0 "success" +3

如果字符串相等,那么应跳转到第二个下一个语句(+1是下一个语句,+2让下一个语句短路,+3将分流下两个语句)。

StrCmp之后只有一个语句:MessageBox。很可能当字符串相等时,流程会跳转到意外的语句...使用+2跳过消息框,或使用标签来避免意外。

答案 1 :(得分:1)

不支持/未定义跳过函数结尾。您应该考虑使用标签或LogicLib.nsh ...