You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Inno Setup Pascal脚本中获取安装/卸载失败原因?

在Inno Setup Pascal脚本中获取安装/卸载结果及错误详情

为统计应用数据,需在Inno Setup Pascal脚本内获取安装或卸载失败的具体原因,包括是否为用户主动取消,或是出现错误及错误详情。目前仅能通过临时方法判断用户取消,但无法可靠获取具体错误信息;现有通过跟踪安装/卸载步骤推导结果的方式复杂且不可靠,希望能在安装/卸载结束事件中便捷获取结果及错误原因。

以下为当前使用的临时代码:

var
  LastInstallStep:   TSetupStep;
  LastPageID:        Integer;
  UserCanceled:      Boolean;
  UserChooseRestart: Boolean;
  LastUninstallStep: TUninstallStep;

procedure AppStat_Init(IsInstaller : boolean; AppName, AppVersion, AppUninstallKey: String; Debug: Boolean);
begin
  // 卸载时默认标记为用户取消,因为启动时会显示无法跳过的确认对话框
  UserCanceled      := not IsInstaller;
  UserChooseRestart := False;
end;

procedure AppStat_StepChange(CurrStep : TSetupStep);
begin
  LastInstallStep := CurrStep;

  if CurrStep = ssDone then
    UserChooseRestart := WizardForm.YesRadio.Checked;
end;

procedure AppStat_InstallCurrPageChange(CurrPageID : Integer);
begin
  LastPageID := CurrPageID;
end;

procedure AppStat_UninstallCurrStepChange(CurUninstallStep: TUninstallStep);
begin
  LastUninstallStep := CurUninstallStep;
  // 用户未在启动确认对话框中取消操作
  UserCanceled      := False;
end;

procedure AppStat_OnUserCanceled();
begin
  UserCanceled := True;
end;

procedure AppStat_DeinitializeSetup();
var
  StatProps: TStrings;
begin
  StatProps := TStringList.Create();

  if LastInstallStep = ssDone then
  begin
    StatProps.Add('result=success');
    if UserChooseRestart then
      StatProps.Add('user_selected_to_restart=true')
    else
      StatProps.Add('user_selected_to_restart=false');
  end
  else if UserCanceled then
    StatProps.Add('result=canceled')
  else
  begin
    StatProps.Add('result=failed');
    // 如需获取更多错误详情,需要解析日志文件
  end;

  StatProps.Add('last_step=' + SetupStepToStr(LastInstallStep));
  StatProps.Add('last_page=' + PageIDToStr(LastPageID));
  
  // 此处可添加将StatProps写入统计数据的逻辑
  StatProps.Free;
end;

procedure AppStat_DeinitializeUninstall();
var
  StatProps: TStrings;
begin
  StatProps := TStringList.Create();

  if LastUninstallStep = usDone then
    StatProps.Add('result=success')
  else if UserCanceled then
    StatProps.Add('result=canceled')
  else
  begin
    StatProps.Add('result=failed');
    // 如需获取更多错误详情,需要解析日志文件
  end;

  StatProps.Add('last_step=' + UninstallStepToStr(LastUninstallStep));
  
  // 此处可添加将StatProps写入统计数据的逻辑
  StatProps.Free;
end;

function InitializeUninstall(): Boolean;
begin
  AppStat_Init(False, '{#AppName}', '{#AppVersion}', '{#UninstallID}_is1', True);
  Result := True;
end;

procedure DeinitializeUninstall();
begin
  AppStat_DeinitializeUninstall();
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  AppStat_UninstallCurrStepChange(CurUninstallStep);
end;

function InitializeSetup: Boolean;
begin
  AppStat_Init(True, '{#AppName}', '{#AppVersion}', '{#UninstallID}_is1', True);
  Result := True;
end;

procedure DeinitializeSetup;
begin
  AppStat_DeinitializeSetup();
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Cancel := True;
  if CurPageID <> wpFinished then
    AppStat_OnUserCanceled();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  AppStat_InstallCurrPageChange(CurPageID);
end;

// 复制日志文件到指定目录
procedure CurStepChanged(CurStep: TSetupStep);
begin
    AppStat_StepChange(CurStep);
end;

内容的提问来源于stack exchange,提问作者Niki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:07:48