Pedido HTTP POST no Inno Setup Script

Eu gostaria de enviar algumas informações coletadas do usuário durante a instalação da instalação Inno para o nosso servidor via POST.

A solução óbvia seria include um arquivo .exe que a configuração extrairia para um local temporário e iniciar com parâmetros. No entanto, eu estou querendo saber – existe alguma maneira mais fácil / melhor?

Baseado no conselho jsobo de usar a biblioteca WinHttp, eu vim com este código muito simples que faz o truque. Digamos que você queira enviar um número de série para verificação antes de iniciar a instalação real. Na seção de código, coloque:

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; 

O método Open aceita como argumentos o método HTTP, a URL e se deseja fazer uma solicitação assíncrona e parece que precisamos adicionar SetRequestHeader para configurar o header Content-Type para application/x-www-form-urlencoded .

WinHttpReq.Status manterá o código de resposta, portanto, para verificar se o servidor retornou com sucesso:

 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 lista todos os methods e propriedades do object WinHttpRequest .

Além disso, para evitar erros de tempo de execução (pode acontecer se o host estiver inacessível), é uma boa idéia cercar o código com try/except código.

Você sempre pode ter seu instalador usando curl para fazer o post http …

Você poderia escrever um script de pascal diretamente em innosetup para fazer a chamada utilizando a biblioteca winhttp

Ou você poderia simplesmente escrever um vbscript e executá-lo com o mecanismo cscript para fazer a mesma chamada http através da biblioteca winhttp.

Isso deve indicar pelo menos três opções diferentes para fazer o que você precisa.

Eu acho que colocar o exe ali seria o menos propenso a erros, mas utilizar a biblioteca winhttp com o script pascal (usado pelo innosetup) seria o mais simples.

Eu não tentei, mas o ISXKB tem uma input para uma pesquisa de desinstalação que usa um HTTP POST: http://www.vincenzo.net/isxkb/index.php?title=Uninstall_Survey