2011-02-02 17 views
11

Vorrei inviare alcune informazioni raccolte dall'utente durante l'installazione di installazione Inno sul nostro server tramite POST.Richiesta POST HTTP in Inno Setup Script

Soluzione ovvia sarebbe includere un file .exe che il programma di installazione estrae in posizione temporanea e avvia con i parametri. Tuttavia, mi chiedo - c'è un modo più semplice/migliore?

+0

Nel nostro approccio di progetto con .exe personalizzato funziona bene. – Sasha

risposta

18

Sulla base del consiglio di jsobo sull'utilizzo della libreria WinHttp, sono arrivato con questo codice molto che fa il trucco. Ad esempio, si desidera inviare il numero di serie per la verifica appena prima dell'inizio dell'installazione effettiva. Nella sezione di codice, inserire:

procedure CurStepChanged(CurStep: TSetupStep); 
var 
    WinHttpReq: Variant; 
begin 
    if CurStep = ssInstall then 
    begin 
    if AutoCheckRadioButton.Checked = True then 
    begin 
     WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1'); 
     WinHttpReq.Open('POST', '<your_web_server>', false); 
     WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
     WinHttpReq.Send('<your_data>'); 
     // WinHttpReq.ResponseText will hold the server response 
    end; 
    end; 
end; 

Il metodo Open prende come argomenti il ​​metodo HTTP, l'URL e se fare richiesta async e sembra che abbiamo bisogno di aggiungere SetRequestHeader al fine di impostare l'intestazione Content-Type a application/x-www-form-urlencoded .

WinHttpReq.Status terrà il codice di risposta, in modo da verificare se il server ha restituito con successo:

if WinHttpReq.Status <> 200 then 
begin 
    MsgBox('ERROR', mbError, MB_OK); 
end 
else 
begin 
    MsgBox('SUCCESS', mbInformation, MB_OK); 
end; 

http://msdn.microsoft.com/en-us/library/aa384106.aspx elenca tutti i metodi e le proprietà dell'oggetto WinHttpRequest.

Inoltre, per evitare errori di runtime (può accadere se l'host non è raggiungibile) è consigliabile circondare il codice con il codice try/except.

+0

Come gestire se internet è offline (o server)? WinHttpReq.Send throiws e non può essere catturato in eccetto/finally = ( – DuckQueen

3

Si può sempre avere il vostro uso installatore curl per rendere l'HTTP POST ...

si potrebbe scrivere uno script pascal proprio nel InnoSetup per fare il utilizzando il winhttp library

chiamata o si può solo scrivere un VBScript ed eseguire che con il motore cscript di fare la stessa chiamata http tramite la libreria WinHTTP.

Questo dovrebbe indicare almeno 3 diverse opzioni per fare ciò che ti serve.

Penso che mettere l'exe in là sia il meno incline all'errore, ma utilizzare la libreria winhttp con lo script pascal (usato da innosetup) sarebbe il più semplice.

Problemi correlati