2011-02-02 27 views
11

Me gustaría enviar cierta información recopilada del usuario durante la instalación de instalación de Inno a nuestro servidor a través de POST.Solicitud HTTP POST en la secuencia de comandos de instalación de Inno

La solución obvia sería incluir un archivo .exe que la configuración extraería en una ubicación temporal y se lanzaría con parámetros. Sin embargo, me pregunto: ¿hay alguna manera más fácil/mejor?

+0

En nuestro enfoque de proyecto con .exe personalizado funciona bien. – Sasha

Respuesta

18

Basado en el consejo de jsobo de usar la biblioteca WinHttp, llegué con este muy código simple que hace el truco. Supongamos que desea enviar el número de serie para su verificación justo antes de que comience la instalación real. En la sección de código, poner:

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; 

El método Open toma como argumentos el método HTTP, la URL y la posibilidad de hacer la solicitud asíncrona y parece que tenemos que añadir SetRequestHeader con el fin de establecer la cabecera Content-Type a application/x-www-form-urlencoded .

WinHttpReq.Status contendrá el código de respuesta, por lo que para comprobar si el servidor ha mostrado:

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 listas de todos los métodos y propiedades del objeto WinHttpRequest.

Además, para evitar errores en tiempo de ejecución (puede suceder si el host no está disponible), es una buena idea rodear el código con el código try/except.

+0

¿Cómo se maneja si internet está fuera de línea (o servidor)? WinHttpReq.Enviar throiws y no se puede atrapar en except/finally = ( – DuckQueen

3

Siempre se puede tener su uso instalador curl para hacer el cargo http ...

se puede escribir un guión Pascal justo en ınnosetup hacer la llamada utilizando la winhttp library

O simplemente podría escribir un VBScript y ejecutar que con el motor cscript hacer la misma llamada HTTP a través de la biblioteca winhttp.

Eso debería indicarle al menos 3 opciones diferentes para hacer lo que necesita.

Creo que poner el exe allí sería el menos propenso a errores, pero utilizar la biblioteca winhttp con el script pascal (utilizado por innosetup) sería el más simple.

Cuestiones relacionadas