Inno Setup - 卸载注册表删除选项

use*_*975 8 inno-setup

程序我正在构建一个安装程序,使用注册表项来存储用户设置.现在我已将它设置为在卸载程序时删除所述注册表文件,但我希望能够为用户提供在卸载时保留或删除注册表文件的选项.

我不是最好的脚本编写者/程序员,因此答案越简单越好.

我的注册表/卸载目前看起来像这样.

    [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"
Run Code Online (Sandbox Code Playgroud)

TLa*_*ama 20

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;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这最多会从一个用户中删除密钥.如果应用程序是按计算机安装的,并且有多个用户运行它,那么除了碰巧运行卸载程序的所有用户之外,所有设置都将保留.如果这让你感到困扰,那么就没有解决方案了,除了让你的每个用户安装(`PrivilegesRequired =最低`),这反过来又限制你可以安装到哪里以及你可以使用哪些标志. (2认同)