2012-10-10 2 views
0

J'ai le code NSIS comme ceci:anormale boucle dans 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 

Lorsque programm dans la fonction de boucle se exécute « de DowloadFiles » il est de retour pas dans le début de boucle. Il est juste de retour à la commande ReadRegStr et obtient toujours la même valeur de $ f1m variable et bloqué sur une boucle.

Quelle est la cause de cette action?

Répondre

1

Dans votre fonction DonwloadFiles, je vois un douteux

StrCmp $R0 "success" +3 

Cela devrait passer à la 2e instruction suivante si les chaînes sont égales (+1 est l'instruction suivante, +2 nous court-circuit l'instruction suivante, et +3 le seront shunter les 2 prochaines déclarations).

Mais il n'y a que une instruction après le StrCmp: MessageBox. Il est probable que lorsque les chaînes sont égales, le flux saute à une déclaration inattendue ... Utilisez +2 pour passer au-dessus de la boîte de message, ou utilisez une étiquette pour éviter les surprises.

1

Le dépassement d'une fin de fonction n'est pas pris en charge/indéfini. Vous devriez envisager d'utiliser des étiquettes ou LogicLib.nsh ...