2

インストーラーの開発に nsis を使用しています。最後のステップとして、ユーザーが自分の電子メール アドレスやその他のデータを取得してサーバーに送信するための登録プロセスがあります。コードは次のとおりです。

StrCpy $ContactName "$0"
StrCpy $ContactEmail "$1"
StrCpy $Coments "$2"
StrCpy $Updates "$3"
StrCpy $PostStr "userName=$ContactName&userEmail=$ContactEmail&userComments=$Coments&updates=$Updates"

inetc::post "$PostStr" "http://www.mysite.com/registration/registerAcceptor.php" "$INSTDIR\output.txt"

Pop $0
StrCmpS $0 "OK" success failedToSubmit
failedToSubmit:
    MessageBox MB_OK|MB_ICONEXCLAMATION "There was an error submitting the registration information"
Return

success:
MessageBox MB_OK|MB_ICONINFORMATION "Your information was successfully received by OrangeHRM"

しかし、ユーザーが登録しようとしている最初の時間は、次のようなエラーメッセージが表示されます

"There was an error submitting the registration information"

そして、次のようにメッセージを使用してコマンドの戻り値を確認すると、

MessageBox MB_OK $0

次のエラーが表示されます

URL Parts Error

しかし、戻って同じアクションを続行すると、成功メッセージが表示され、戻り値も次のようになります

OK

これら 2 つのシナリオで、このことが 2 つの別々の方法で機能する理由はわかりません。誰か助けてくれませんか。

前もって感謝します。

4

2 に答える 2

6

このフォーラム スレッドで提案されているように、プラグイン呼び出しに "/END" を追加してみてください(スタックには他のものがあり、プラグインは読み取りを停止するタイミングを認識していない可能性があります。これにより、2 回目に動作する理由が説明されます)。

于 2012-05-02T12:31:37.633 に答える
2

inetcNSISプラグインでも同じ問題がありましたが、違いは、/ENDすでに使用していて、同じケースでは多少機能しなかったことです。問題が不明なスタックに関連していることを読んだ後、コードを確認したところ、さまざまな関数への呼び出しが多数あり、スタックが変数で雑然としていました。送信したという事実でも/END役に立たなかったので、inetc を呼び出す前に、インターネットからのコードを使用してすべての変数から手動でスタックをクリアしようとしましたが、それは魔法のように機能しました。

コードは次のとおりです。

!macro ClearStack
    ${Do}
        Pop $0
        IfErrors send
    ${Loop}
send:
!macroend

!define ClearStack "!insertmacro ClearStack"

重複を避けるためにマクロとして使用することも、inetc で何かを送信する必要がある場所にコピー アンド ペーストすることもできます。

于 2013-07-10T12:46:58.160 に答える