inno setup卸载时弹出意见反馈窗口和使用WinHttpRequest上传

当我们使用inno setup打包时,希望用户在卸载时能够弹出自定义窗口,并上传信息到服务器。
如图自定义窗口:
在这里插入图片描述
我希望用户填写描述信息和邮件,当点击Uninstall时开始上传数据。

注意:inno setup里换行符为**#13#10**,控件生成布局和卸载逻辑判断都是在InitializeUninstallProgressForm接口里,数据上传使用的是WinHttpRequest

关于WinHttpRequest的使用

WinHttpReq.SetRequestHeader('Content-Type', 'multipart/form-data; boundary= abcd');

我上传用的是表单的形式,可传文件也可不传文件,其中boundary= abcd 'abcd’表示自定义的分隔符。上传的body数据开头必须以 --abcd表示开始,以–abcd–表示结束,

下面直接上代码,可直接拷贝代码,然后编译运行安装后,打开安装目录双击卸载程序看效果

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProgTest.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{937FF684-D2F1-4D0A-B71D-EF2D1DD8B6A4}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputBaseFilename=mysetup
Compression=lzma
SolidCompression=yes
WizardStyle=modern

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 6\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[Code]
var
  UninstallFeedBackPage: TNewNotebookPage;
  UninstallButton: TNewButton;
  ComboBox: TNewComboBox;
  ComboLabel: TNewStaticText;
  Memo: TNewMemo;
  Edit: TNewEdit;
  ComboText, DiscripText, EmailText, MsgText: TNewStaticText;
  

procedure UninstallButtonClick(Sender: TObject);
var
  WinHttpReq: Variant;
  requestType:  string;
  discription: string;
  email: string;
  url,body: string;
begin
  if Memo.Text <> '' then
  begin
     requestType := ComboBox.Text;
     discription := Memo.Text;
     email := Edit.Text;
     url := 'http://xxx.com:8080/cgaga/api/shopify/file/feedback?' + 'problemType=' + requestType + '&content=' +discription + '&email=' + email;

     WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
     WinHttpReq.Open('POST', url, false);//第三个参数表示同步或异步上传
     WinHttpReq.SetRequestHeader('Content-Type', 'multipart/form-data; boundary= abcd');

     body :=  '--abcd' + #13#10;
     body := body + 'Content-Disposition: form-data; name="file"; filename=""' + #13#10;
     body := body + 'Content-Type:text/plain' + #13#10#13#10;  //application/octet-stream
     body := body + '' + #13#10;//因为没有传文件,所以这里是空字符串''
     body := body + '--abcd--' + #13#10;
     
     WinHttpReq.Send(body);
     if WinHttpReq.Status <> 200 then
     begin
        MsgBox(WinHttpReq.ResponseText, mbError, MB_OK);
     end
       else
     begin
        MsgBox('SUCCESS', mbInformation, MB_OK);
     end;
  end;
     UninstallButton.Visible := False;
     ComboText.Visible := False;
     ComboBox.Visible := False;
     DiscripText.Visible := False;
     Memo.Visible := False;
     EmailText.Visible := False;
     Edit.Visible := False;
     MsgText.Visible := False;
end;

procedure InitializeUninstallProgressForm();
var
  PageNameLabel: string;
  PageDescriptionLabel: string;
  CancelButtonEnabled: Boolean;
  CancelButtonModalResult: Integer;
  
begin
  if not UninstallSilent then
  begin
    { Create the first page and make it active }

    UninstallButton := TNewButton.Create(UninstallProgressForm);
    UninstallButton.Parent := UninstallProgressForm;
    UninstallButton.Left :=UninstallProgressForm.CancelButton.Left - UninstallProgressForm.CancelButton.Width - ScaleX(10);
    UninstallButton.Top := UninstallProgressForm.CancelButton.Top;
    UninstallButton.Width := UninstallProgressForm.CancelButton.Width;
    UninstallButton.Height := UninstallProgressForm.CancelButton.Height;
    UninstallButton.Caption := 'Uninstall';
    UninstallButton.ModalResult := mrOK;
    UninstallButton.OnClick := @UninstallButtonClick;

    UninstallFeedBackPage := TNewNotebookPage.Create(UninstallProgressForm);
    UninstallFeedBackPage.Notebook := UninstallProgressForm.InnerNotebook;
    UninstallFeedBackPage.Parent := UninstallProgressForm.InnerNotebook;
    UninstallFeedBackPage.Align := alClient;
    
    ComboText := TNewStaticText.Create(UninstallProgressForm);
    ComboText.Parent := UninstallFeedBackPage;
    ComboText.Top := ScaleY(3);
    ComboText.Left := UninstallProgressForm.StatusLabel.Left;
    ComboText.Width := 72;
    ComboText.AutoSize := False;
    ComboText.ShowAccelChar := False;
    ComboText.Caption := 'Request Type';
     
    ComboBox := TNewComboBox.Create(UninstallProgressForm);
    ComboBox.Parent :=   UninstallFeedBackPage;
    ComboBox.Width := ScaleX(100);
    ComboBox.Top :=  ScaleY(0);
    ComboBox.Left :=  ComboText.Left + ComboText.Width + ScaleX(5);//UninstallProgressForm.StatusLabel.Left;
    ComboBox.Style := csDropDownList;
    ComboBox.Items.Add('Please select...');
    ComboBox.Items.Add('Suggestion');
    ComboBox.Items.Add('User experience');
    ComboBox.Items.Add('Activate issue');
    ComboBox.Items.Add('Report a bug');
    ComboBox.Items.Add('Others');
    ComboBox.ItemIndex := 0;


    DiscripText := TNewStaticText.Create(UninstallProgressForm);
    DiscripText.Parent := UninstallFeedBackPage;
    DiscripText.Top := ComboBox.Top + ComboBox.Height + ScaleY(15);
    DiscripText.Left := UninstallProgressForm.StatusLabel.Left;
    DiscripText.Width := 100;
    DiscripText.AutoSize := False;
    DiscripText.ShowAccelChar := False;
    DiscripText.Caption := 'Description';

    Memo := TNewMemo.Create(UninstallProgressForm);
    Memo.Parent := UninstallFeedBackPage;
    Memo.Top := DiscripText.Top + DiscripText.Height + ScaleY(3);
    Memo.Left :=  UninstallProgressForm.StatusLabel.Left;
    Memo.Width := ScaleX(420);
    Memo.Height := ScaleY(100);
    Memo.Anchors := [akLeft, akTop, akRight, akBottom];
    Memo.ScrollBars := ssVertical;
    Memo.Text := '';
    Memo.MaxLength := 1500;


    EmailText := TNewStaticText.Create(UninstallProgressForm);
    EmailText.Parent := UninstallFeedBackPage;
    EmailText.Top := Memo.Top + Memo.Height + ScaleY(20);
    EmailText.Left := UninstallProgressForm.StatusLabel.Left;
    EmailText.Width := 100;
    EmailText.AutoSize := False;
    EmailText.ShowAccelChar := False;
    EmailText.Caption := 'Email';

    Edit := TNewEdit.Create(UninstallProgressForm);
    Edit.Parent := UninstallFeedBackPage;
    Edit.Top := EmailText.Top + EmailText.Height + ScaleY(3);
    Edit.Left := UninstallProgressForm.StatusLabel.Left;
    Edit.Width := UninstallFeedBackPage.Width div 2 + ScaleX(20);

    MsgText := TNewStaticText.Create(UninstallProgressForm);
    MsgText.Parent := UninstallFeedBackPage;
    MsgText.Top := Edit.Top + Edit.Height + ScaleY(2);
    MsgText.Left := UninstallProgressForm.StatusLabel.Left;
    MsgText.Width := UninstallFeedBackPage.Width;
    MsgText.AutoSize := False;
    MsgText.ShowAccelChar := False;
    MsgText.Font.Color := clGray;
    MsgText.Caption := 'We will look into your feedback and get back to you if necessary.';

    UninstallProgressForm.InnerNotebook.ActivePage := UninstallFeedBackPage;

    PageNameLabel := UninstallProgressForm.PageNameLabel.Caption;
    PageDescriptionLabel := UninstallProgressForm.PageDescriptionLabel.Caption;

    UninstallProgressForm.CancelButton.TabOrder := UninstallButton.TabOrder + 1;
    UninstallProgressForm.PageNameLabel.Caption := 'Cgaga Fotosifter';
    UninstallProgressForm.PageDescriptionLabel.Caption :='You can describe your suggestion and the issue you encountered in detail';

    { Run our wizard pages } 
    CancelButtonEnabled := UninstallProgressForm.CancelButton.Enabled
    UninstallProgressForm.CancelButton.Enabled := True;
    CancelButtonModalResult := UninstallProgressForm.CancelButton.ModalResult;
    UninstallProgressForm.CancelButton.ModalResult := mrCancel;

    if UninstallProgressForm.ShowModal = mrCancel then Abort;

    { Restore the standard page payout }
    UninstallProgressForm.CancelButton.Enabled := CancelButtonEnabled;
    UninstallProgressForm.CancelButton.ModalResult := CancelButtonModalResult;

    UninstallProgressForm.PageNameLabel.Caption := PageNameLabel;
    UninstallProgressForm.PageDescriptionLabel.Caption := PageDescriptionLabel;

    UninstallProgressForm.InnerNotebook.ActivePage :=
      UninstallProgressForm.InstallingPage;
  end;
end;


其实inno setup就自带帮助文档和很多示例代码,在安装路径中就可找到。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值