0

我有这样的 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 变量值并卡在一个循环中。

这个动作的原因是什么?

4

2 回答 2

1

在你的DonwloadFiles功能中,我看到了一个可疑的

StrCmp $R0 "success" +3

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

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

于 2012-10-10T12:56:04.967 回答
1

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

于 2012-10-10T20:08:50.443 回答