Inno安装程序中无需等待响应的异步HTTP POST请求

Inno安装程序中无需等待响应的异步HTTP POST请求,http,post,inno-setup,pascal,winhttprequest,Http,Post,Inno Setup,Pascal,Winhttprequest,我有一个Inno安装程序,需要在安装过程中调用API。这会将一些数据发布到远程API POST调用在[Code]部分使用Pascal和WinHttpRequest对象执行。 API是ASP.NETWebAPI 2(C#) 我完全控制整个过程的所有部分,即Inno设置脚本、代码部分和WebAPI 问题 我可以同步进行POST调用而不会出现任何问题,但是如果我在WinHttpRequest.Open()方法上将async标志设置为true,则.Send()方法似乎根本不会执行 程序后置数据(姿势:

我有一个Inno安装程序,需要在安装过程中调用API。这会将一些数据发布到远程API

POST调用在[Code]部分使用Pascal和WinHttpRequest对象执行。 API是ASP.NETWebAPI 2(C#)

我完全控制整个过程的所有部分,即Inno设置脚本、代码部分和WebAPI

问题 我可以同步进行POST调用而不会出现任何问题,但是如果我在
WinHttpRequest.Open()
方法上将async标志设置为
true
,则
.Send()
方法似乎根本不会执行


程序后置数据(姿势:字符串);
变量
WinHttpReq:变体;
内容:字符串;
开始
尝试
WinHttpRequest:=CreateOleObject('WinHttp.WinHttpRequest.5.1');
要求内容:='项目=价值';
WinHttpReq.Open('POST',postrl,true);
WinHttpReq.SetRequestHeader('Content-Type','application/x-www-form-urlencoded');
WinHttpReq.Send(请求内容);
除了
结束;
结束;

我使用VisualStudio调试器中的断点进行了检查,但从未调用该端点

在这里和谷歌上搜索时,我只找到了各种异步获取响应的尝试,但我找不到解决这个问题的方法。我不需要响应,这是一个fire-and-forget类型的API调用


浓缩问题 为什么API没有收到调用,我如何修复


谢谢。

要完成异步请求,WinHttpRequest的实例必须保持“活动状态”

为此,您必须确保至少:

  • 变量
    WinHttpReq
    将一直存在,直到请求完成。也就是说,在您的特定情况下,您不能在请求完成之前离开
    PostData
    。或者您需要使
    WinHttpReq
    成为全局变量(而不是
    PostData
    过程的局部变量)

    var
    WinHttpReq:变体;
    程序后置数据(姿势:字符串);
    变量
    内容:字符串;
    开始
    尝试
    WinHttpRequest:=CreateOleObject('WinHttp.WinHttpRequest.5.1');
    要求内容:='项目=价值';
    WinHttpReq.Open('POST',postrl,true);
    WinHttpReq.SetRequestHeader(
    “内容类型”、“应用程序/x-www-form-urlencoded”);
    WinHttpReq.Send(请求内容);
    除了
    结束;
    结束;
    
  • 进程(安装程序)本身运行,直到请求完成


谢谢,恐怕是D

procedure PostData(postural: String);
   var 
     WinHttpReq: Variant;
     ReqContent: String;
   begin
     try
       WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
       ReqContent := 'item=value';
       WinHttpReq.Open('POST', postUrl, true);
       WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
       WinHttpReq.Send(ReqContent);
     except
     end;
   end;