0
の進捗バーの場合、Inno SetupのアンインストールフォームにCurProgress
とMaxProgress
の値が入っていますか?Innoセットアップのアンインストールプログレスバーの変更イベント
の進捗バーの場合、Inno SetupのアンインストールフォームにCurProgress
とMaxProgress
の値が入っていますか?Innoセットアップのアンインストールプログレスバーの変更イベント
これに対応するネイティブサポートはありません。
あなたができることは、タイマーを設定して、UninstallProgressForm.ProgressBar.Position
の変更を監視することです。
タイマーもトリッキーです。再び、ネイティブサポートはありません。 InnoTools InnoCallback DLL libraryを使用できます。しかし、アンインストーラからの外部DLLライブラリを使用することも難しいです。 (あなたの)Load external DLL for uninstall process in Inno Setupを参照してください。
コードは次のようであってもよい:How keep uninstall files inside uninstaller?
を参照して、別の解決策について[Files]
Source: InnoCallback.dll; DestDir: {app}
[Code]
type
TTimerProc = procedure(h: LongWord; Msg: LongWord; IdEvent: LongWord; dwTime: LongWord);
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 WrapTimerProc(Callback: TTimerProc; ParamCount: Integer): LongWord;
external '[email protected]{%TEMP}\innocallback.dll stdcall uninstallonly delayload';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord;
lpTimerFunc: LongWord): LongWord;
external '[email protected] stdcall';
procedure InitializeUninstallProgressForm();
var
TimerCallback: LongWord;
begin
if FileCopy(ExpandConstant('{app}\innocallback.dll'),
ExpandConstant('{%TEMP}\innocallback.dll'), False) then
begin
TimerCallback := WrapTimerProc(@TimerProc, 4);
SetTimer(0, 0, 100, TimerCallback); { every 100 ms }
end;
end;
(良いが、より実装するために複雑)