我有这样的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变量的相同值并且卡在一个循环上。
这个行动的原因是什么?
答案 0 :(得分:1)
在DonwloadFiles
函数中,我看到了一个可疑的
StrCmp $R0 "success" +3
如果字符串相等,那么应跳转到第二个下一个语句(+1
是下一个语句,+2
让下一个语句短路,+3
将分流下两个语句)。
但StrCmp
之后只有一个语句:MessageBox
。很可能当字符串相等时,流程会跳转到意外的语句...使用+2
跳过消息框,或使用标签来避免意外。
答案 1 :(得分:1)
不支持/未定义跳过函数结尾。您应该考虑使用标签或LogicLib.nsh ...