Solicitud HTTP POST en la secuencia de comandos Inno Setup

Me gustaría enviar cierta información recostackda del usuario durante la instalación de instalación de Inno a nuestro servidor a través de POST.

La solución obvia sería incluir un archivo .exe que la instalació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?

Basado en el consejo de jsobo de usar la biblioteca WinHttp, vine con este código muy simple que funciona. 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 del código, pon:

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', '', false); WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); WinHttpReq.Send(''); // WinHttpReq.ResponseText will hold the server response end; end; end; 

El método Open toma como argumentos el método HTTP, la URL y si se realiza una solicitud asincrónica y parece que necesitamos agregar SetRequestHeader para establecer el encabezado Content-Type en application/x-www-form-urlencoded .

WinHttpReq.Status contendrá el código de respuesta, para verificar si el servidor regresó correctamente:

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

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

Siempre puedes hacer que tu instalador use curl para hacer la publicación http …

Puede escribir un script pascal directamente en innosetup para hacer la llamada utilizando la biblioteca winhttp

O simplemente podría escribir un vbscript y ejecutarlo con el motor de cscript para 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.

No lo he intentado, pero el ISXKB tiene una entrada para una encuesta de desinstalación que utiliza HTTP POST: http://www.vincenzo.net/isxkb/index.php?title=Uninstall_Survey