2012-05-02 2 views
2

"URL 부품 오류"설치 프로그램을 개발하는 데 nsis를 사용하고 있습니다. 마지막 단계로 사용자가 자신의 이메일 주소 및 기타 데이터를 가져 와서 서버로 보내는 등록 프로세스가 있습니다. 코드는 다음과 같습니다. inetc :: post with 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 
을 보여줍니다 0

하지만이 같은 행동으로 되돌아 가서 시험을 할 때 그것은 성공 메시지가 발생하며 반환 값이 일이 두 시나리오에서 두 개의 별도의 방법을 작동하는 이유는 확실하지 않다

OK 

으로도이다. 누군가 도와 줄 수 있어요.

미리 감사드립니다.

답변

6

this forum thread에 제안 된대로 플러그인 호출에 "/ END"를 추가하십시오 (스택에 다른 것들이있을 수 있으며 플러그인이 읽을 시간을 모르면 두 번째로 작동하는 이유를 설명 할 것입니다)

+0

그것은 나를 위해 작동합니다. Anders와 대단히 감사합니다. :) – Thilanka

2

inetc NSIS 플러그인과 동일한 문제가 있었지만 차이점은 이미 /END을 사용했기 때문에 동일한 경우에 다소 효과가 없었습니다. 문제가 불분명 한 스택과 관련되어 있다는 것을 읽은 후에 코드를 검사하고 스택에 변수가 복잡하게 남아있는 다양한 함수에 대한 호출이 많이있었습니다. 사실 /END을 전송 한 사실조차도 도움이되지 않았기 때문에 inetc를 호출하기 전에 인터넷의 코드로 모든 변수에서 수동으로 스택을 지우려고 시도했지만 마술처럼 해결되었습니다.

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

!define ClearStack "!insertmacro ClearStack" 

어떤 중복을 피하기 위해 매크로로 사용하거나 복사 - 붙여 넣기를 마우스 오른쪽 당신이 inetc 뭔가를 보낼 필요가있는 장소에서 수 그래서 여기

는 코드입니다.