13

インストーラーを作成しているプログラムは、レジストリ エントリを使用してユーザー設定を保存します。現在、プログラムのアンインストール時に上記のレジストリ ファイルを削除するように設定していますが、アンインストール時にレジストリ ファイルを保持するか削除するかをユーザーが選択できるようにしたいと考えています。

私は最高のスクリプター/プログラマーではないので、答えが単純であればあるほど良いでしょう。

私のレジストリ/アンインストールは現在このようになっています。

    [Registry]
    Root: HKCU; Subkey: "Software\FFSPLIT Overlay Filter"; Flags: uninsdeletekey


    [UninstallDelete]  
    Type: filesandordirs; Name: "{app}\ffmpeg"
    Type: filesandordirs; Name: "{app}\OverlayData"
    Type: files; Name: "{app}\AForge.Controls.dll"
    Type: files; Name: "{app}\AForge.Imaging.dll"
    Type: files; Name: "{app}\AForge.Video.DirectShow.dll"
    Type: files; Name: "{app}\AForge.Video.dll"
    Type: files; Name: "{app}\AudioFilter.ax"
    Type: files; Name: "{app}\default.cfg"
    Type: files; Name: "{app}\DirectShowLib-2005.dll"
    Type: files; Name: "{app}\ffmpeg.exe"
    Type: files; Name: "{app}\FFSplit Overlay Filter.ax"
    Type: files; Name: "{app}\FFsplit.exe"
    Type: files; Name: "{app}\FFSplitOverlayManager.exe"
    Type: files; Name: "{app}\librtmp.dll"
    Type: files; Name: "{app}\msvcp100d.dll"
    Type: files; Name: "{app}\msvcr100d.dll"
    Type: files; Name: "{app}\NAudio.dll"
    Type: files; Name: "{app}\RegisterFilter.bat"
    Type: files; Name: "{app}\setting.cfg"
    Type: files; Name: "{app}\UNRegisterFilter.bat"
    Type: files; Name: "{app}\wavbuffer"
    Type: files; Name: "{app}\Micfilter.ax"
4

1 に答える 1

25

InnoSetupには条件付きアンインストールチェックパラメーターがないため、これは自分で行う必要があります。したがって、レジストリキーを自動的に削除するフラグを削除する必要がありuninsdeletekeyます。アンインストールプロセスの最後に、ユーザーにそのキーを(意味のあるメッセージで)削除して手動で削除するかどうかを尋ねることができます。次のスクリプトは、アンインストール後のステップでこれを実行します。これは、アプリケーションが正常にアンインストールされた時刻です。あなたはフォローすることができますcommented version

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

#define FilterRegKey "Software\FFSPLIT Overlay Filter"

[Registry]
Root: HKCU; Subkey: "{#FilterRegKey}"

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then
  begin
    if RegKeyExists(HKEY_CURRENT_USER, '{#FilterRegKey}') then
      if MsgBox('Do you want to delete the overlay filter registry key ?',
        mbConfirmation, MB_YESNO) = IDYES
      then
        RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, '{#FilterRegKey}');
  end;
end;
于 2012-09-28T18:59:53.597 に答える