如何在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
相关产品推荐
相关产品推荐

