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

我不确定为什么这件事在这两种情况下会以两种不同的方式起作用。有人可以帮忙吗。

提前致谢。

4

2 回答 2

6

尝试按照此论坛帖子中的建议将“/END”添加到插件调用中(堆栈上可能还有其他内容,并且插件不知道何时停止阅读,这可以解释为什么它第二次起作用)

于 2012-05-02T12:31:37.633 回答
2

我在使用 NSIS 插件时遇到了同样的问题inetc,但不同之处在于我/END已经使用过,并且在相同的情况下它在某种程度上不起作用。在我读到这个问题与不明确的堆栈有关后,我检查了我的代码,并且有很多对各种函数的调用,这使得堆栈中充满了变量。因为即使我传输的事实/END也无济于事,所以我尝试在每次调用 inetc 之前使用来自互联网的代码手动清除所有变量的堆栈,这很神奇。

所以这里是代码:

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

!define ClearStack "!insertmacro ClearStack"

您可以将其用作宏以避免任何重复,或者只是将其复制粘贴到您需要使用 inetc 发送内容的地方。

于 2013-07-10T12:46:58.160 回答