Inno Setupは初めてです。 1つの問題、つまり、アプリケーションによって作成されたすべてのファイル、フォルダー、サブフォルダー、さらには新しいファイル/フォルダーなどを削除するようにアンインストールピースを構成する方法(つまり、アプリケーションと関連ファイルの100%の削除)。
私はここと彼らのフォーラムで探し回り、空っぽになりました。誰かが私に文書を指摘してもらえますか、FAQなど、これを行う方法について?
[〜#〜]更新[〜#〜]
これまでのすべてのフィードバックに感謝します(非常に素晴らしい)。したがって、アンインストールセクションで{app} *。*ディレクティブを使用してすべてを削除できるようです。また、誰もが反対しているようです。 これで質問は次のようになります(これがまったく新しい質問になるかどうか疑問に思っています)には、アンインストール中にユーザーに「これに関連付けられているすべてのプロジェクトファイルを削除しますか?応用?'そして、彼らが「はい」と答えた場合、アンインストール{app} *。*ピースを実行しますか?
ありがとう-
あなたはおそらくこれをまったく新しい質問にすべきでしたが、更新された質問にもここで答えます。 Inno Setup Documentationのセクション"Pascal Scripting:Uninstall Code"をご覧ください。
アンインストールプロセスの一部としてデータファイルを条件付きで削除する方法の例を示します。
[Code]
procedure DeleteBitmaps(ADirName: string);
var
FindRec: TFindRec;
begin
if FindFirst(ADirName + '\*.*', FindRec) then begin
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then begin
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then begin
DeleteBitmaps(ADirName + '\' + FindRec.Name);
RemoveDir(ADirName + '\' + FindRec.Name);
end;
end else if Pos('.bmp', AnsiLowerCase(FindRec.Name)) > 0 then
DeleteFile(ADirName + '\' + FindRec.Name);
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then begin
if MsgBox('Do you want to delete all data files?', mbConfirmation,
MB_YESNO) = IDYES
then begin
DeleteBitmaps(ExpandConstant('{app}'));
end;
end;
end;
ただし、クリーンアップする必要があるものの量によっては、インストールの一部であり、アプリのアンインストール中に実行できる特別なヘルパープログラムを作成した方がよい場合があります(([UninstallRun]セクション)。
アンインストールセクションで削除するものを指定することをお勧めします。その理由は、ユーザーが何らかの理由でインストールディレクトリに自分のファイルを削除したくない、または保存したいデータを保存したいと考えた場合です(おそらくアンインストールは新しいバージョンをインストールすることですか?) )
そうは言っても、私はスクリプトが何であるかわかりませんが、ISTool(強く推奨)を使用している場合は、[削除の削除]セクションに移動して、削除するものを追加します。 Nice GUIで可能なすべてのオプションを提示し、スクリプトを生成します。
編集:Inno Setupドキュメントの例:
[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"
しかし、彼らはあなたが次のようなことをしないことを強く望みます
[UninstallDelete]
Type: files; Name: "{app}\*.*"
注:ここでワイルドカードを使用して、{app}ディレクトリ内のすべてのファイルを削除するように誘惑されないでください。 2つの理由でこれを行わないことを強くお勧めします。まず、ユーザーは通常、アプリケーションディレクトリに配置したデータファイルを警告なしに削除してもらえません(たとえば、別のドライブに移動したいためにアンインストールしているだけかもしれません)。必要に応じてエンドユーザーが手動で削除することをお勧めします。また、ユーザーが誤ってプログラムを間違ったディレクトリ(たとえば、C:\ WINDOWS)にインストールしてからアンインストールした場合、悲惨な結果になる可能性があります。繰り返しますが、これを行わないでください!
インストール時に最初にユーザーのディスクに書き込まれなかったファイルを削除したい場合があります。これらのケースの1つは、起動時に自身を更新するアプリケーションがある場合です。この方法で、アンインストーラーの一部ではない新しいファイルをディスクに追加できます。
この場合、{app}ディレクトリにあるべきファイルの実行記録を保持する「パッチマニフェスト」ファイルを作成することをお勧めします。 「patch_manifest.txt」という{app}ディレクトリのファイルから読み取るコードのサンプルを以下に示します
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にインストールしたユーザーのケースを取り上げます。
別の良いアイデアは、削除する前にMD5チェックを実行して、ファイルが実際に「自分のファイル」であることを確認することです。この場合、patch_manifest.txtには、ファイルへの相対パスだけでなく、MD5チェックサムも含まれます。
InnoSetupを使用して、インストールされなかったものをアンインストールすることはできません。また、アンインストールする必要もありません。アプリケーションをインストールし、大量のデータを入力して、代わりにアプリからそのデータを読み取る別の何かを使用することにした場合、私は1つは非常に不幸です。アンインストールで既に行った作業がすべて終了してしまった場合、私はあなたを探しに来たくなるかもしれません。そしておそらくあなたに一杯のコーヒーを買わないでください。
または、いくつかの評価プロセスでアプリケーションをインストールする場合を考えてみます。私はアプリを試してみて、あなたのアプリに戻っていきます。少し気に入ったからです。データを入力するたびに。それからしばらくは何もしないことにしたので、すべてのテストアプリを削除します。 1週間後、結局アプリを使用する必要があると判断し、再インストールします。おっとっと!テストした結果、使用したかった作業はすべてなくなりました。
上記は、アプリケーションをアンインストールするときに、構成ファイル、データファイルなど、フォルダーに作成したものを残しておく理由です。アプリケーションで何をしたいのかわからないので、そのままにしておきます。
これでうまくいくはずです:
[Dirs]
Name: "{app}"; Flags: uninsalwaysuninstall
Inno Setup Studioでファイル/フォルダーの削除項目を追加します。または、次のように直接スクリプトを使用します。
[生成されたコードサンプル]
[UninstallDelete]
Type: filesandordirs; Name: "{app}\unnecessary_files"
削除したかったgData.dat
実行時にインストールされたフォルダに作成されました
そして私のためにうまく働いていた
[UninstallDelete]
Type: files; Name: "{app}\gData.dat"
エントリに「uninsneveruninstall」を指定しない場合、それがデフォルトではありませんか?
編集-申し訳ありませんが、新しく作成されたデータファイルについて話していることに気づきませんでした。