2016-05-04 36 views

答えて

0

これに対応するネイティブサポートはありません。

あなたができることは、タイマーを設定して、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; 

(良いが、より実装するために複雑)

関連する問題