在nsis中使用inetc :: post的“URL部件错误”

时间:2012-05-02 12:12:44

标签: installer nsis

我正在使用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 个答案:

答案 0 :(得分:6)

尝试按照this forum thread中的建议将“/ END”添加到插件调用中(堆栈上可能还有其他内容,插件不知道何时停止读取,这可以解释为什么它会在第二次运行时周围)

答案 1 :(得分:2)

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

所以这是代码:

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

!define ClearStack "!insertmacro ClearStack"

您可以将其用作宏来避免重复,或者只是在您需要使用inetc发送内容的位置进行复制粘贴。