【发布时间】:2016-05-04 11:59:48
【问题描述】:
在 Inno Setup 的 Uninstall 表单中是否有任何事件/功能,例如 CurInstallProgressChanged 用于进度条的 CurProgress 和 MaxProgress 值?
【问题讨论】:
标签: inno-setup
在 Inno Setup 的 Uninstall 表单中是否有任何事件/功能,例如 CurInstallProgressChanged 用于进度条的 CurProgress 和 MaxProgress 值?
【问题讨论】:
标签: inno-setup
对此没有本机支持。
您可以做的是设置一个计时器并观察UninstallProgressForm.ProgressBar.Position 中的变化。
代码可能是这样的:
[Code]
procedure TimerProc(h: LongWord; AMsg: LongWord; IdEvent: LongWord; dwTime: LongWord);
begin
Log(Format(
'Uninstall progress: %d/%d',
[UninstallProgressForm.ProgressBar.Position, UninstallProgressForm.ProgressBar.Max]));
end;
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord;
lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';
procedure InitializeUninstallProgressForm();
begin
SetTimer(0, 0, 100, CreateCallback(@TimerProc)); { every 100 ms }
end;
对于CreateCallback function,您需要 Inno Setup 6。
如果您被 Inno Setup 5 卡住,您可以使用 InnoTools InnoCallback 库中的 WrapCallback 函数(代码需要 Inno Setup 5 的 Unicode 版本)。但是从卸载程序中使用外部 DLL 库很棘手,并且有其缺点。请参阅(您的)Load external DLL for uninstall process in Inno Setup。有关另一种解决方案(更好但实施起来更复杂),请参阅How keep uninstall files inside uninstaller?
【讨论】: