インストール時に最初にユーザーのディスクに書き込まれなかったファイルを削除したい場合があります。これらのケースの 1 つは、起動時に自分自身を更新するアプリケーションがある場合です。この方法で、アンインストーラーの一部ではない新しいファイルをディスクに追加できます。
この場合、{app} ディレクトリにあるファイルの実行記録を保持する「パッチ マニフェスト」ファイルを作成することをお勧めします。{app} ディレクトリにある「patch_manifest.txt」というファイルから読み取るコードのサンプルを以下に示します。
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
i: Integer;
arrayLen: Longint;
item: String;
itemsToDelete: Array of String;
begin
case CurUninstallStep of
usUninstall:
begin
LoadStringsFromFile(ExpandConstant('{app}') + '\patch_manifest.txt', itemsToDelete);
arrayLen := GetArrayLength(itemsToDelete);
for i := 0 to arrayLen-1 do
begin
item := ExpandConstant('{app}') + '\' + itemsToDelete[i];
if FileExists(item) then
DeleteFile(item);
if DirExists(item) then
RemoveDir(item);
end;
end;
end;
end;
および patch_manifest.txt のサンプル
data/something_here.dat
data/moredatahere.dat
data/
Launcher.exe
patch_manifest.txt
注: patch_manifest の行の順序は重要です。ディレクトリ内のすべてのファイルを最初にリストし、次にディレクトリをリストする必要があります。空でないディレクトリは削除できません。
アプリケーションには patch_manifest が同梱されている必要があり、patch_manifest はすべてのパッチで更新する必要があります。更新を忘れないように、ビルド プロセスのこの部分を作成してください。
ユーザーにプロンプトを表示しても、ワイルドカード ( . ) で削除しないことが非常に重要です。アンインストーラーには昇格された特権があり、ユーザーのコンピューターを破壊する可能性があります。アプリケーションを誤って C:\Windows\ または C:\Program Files にインストールしたユーザーの場合を考えてみましょう。
もう 1 つの良い方法は、ファイルを削除する前に MD5 チェックを実行して、ファイルが実際に「自分のファイル」であることを確認することです。この場合、patch_manifest.txt には、ファイルへの相対パスだけでなく、MD5 チェックサムも含まれます。