【问题标题】:Abnormal for loop in NSISNSIS中的异常for循环
【发布时间】:2012-10-10 12:20:29
【问题描述】:

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

这个动作的原因是什么?

【问题讨论】:

    标签: for-loop nsis


    【解决方案1】:

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

    StrCmp $R0 "success" +3
    

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 2014-07-01
        • 2013-07-30
        相关资源
        最近更新 更多