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

関数の終わりを超えるジャンプはサポートされていないか未定義です。ラベルまたはLogicLib.nshの使用を検討する必要があります ...

于 2012-10-10T20:08:50.443 に答える
1

あなたのDonwloadFiles機能には、疑わしいものがあります

StrCmp $R0 "success" +3

文字列が等しい場合、2 番目の次のステートメントにジャンプする必要があります (+1は次のステートメントであり、次のステートメントを+2短絡させ+3、次の 2 つのステートメントをシャントします)。

しかし、 the の後には1 つのステートメントしかありません。文字列が等しい場合、フローが予期しないステートメントにジャンプしている可能性があります... を使用してメッセージ ボックスを飛び越えるか、ラベルを使用して驚きを回避します。StrCmpMessageBox+2

于 2012-10-10T12:56:04.967 に答える