Search code examples
inno-setup

Inno Setup remove specific reg key after uninstall


I try to remove a registry key after uninstalling it in Windows, but I couldn't get it working somehow. I tried everything which was listed here: Inno Setup: Removing a problematic registry key left by another program

I checked different docs of Inno Setup:

I ended up with this:

; Basic setup for a JavaFX application

#define AppName "Practicumopdracht OOP2"
#define AppVersion "1.0.0"
#define AppPublisher "Remzi Cavdar"
#define AppURL "https://twitter.com/remzicavdar"
#define AppExeName "practicumopdracht.jar"
#define AppExeDir "C:\Users\Remzi\Projects\student-1\out\artifacts\practicumopdracht_jar"
#define AppIcon "app.ico"
#define ProjectDir "C:\Users\Remzi\Projects\JavaFX-Setup"

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{DD7E7C3F-F4AC-4D76-8626-95019C15E111}
AppName={#AppName}
AppVersion={#AppVersion}
VersionInfoVersion=1.0.0.0
VersionInfoCopyright={#AppPublisher} - [email protected]
AppVerName={#AppName}
AppPublisher={#AppPublisher}
AppPublisherURL={#AppURL}
AppSupportURL={#AppURL}
AppUpdatesURL={#AppURL}
DefaultDirName={localappdata}\Remzi Cavdar\{#AppName}
DisableProgramGroupPage=yes
PrivilegesRequired=lowest
OutputBaseFilename=Setup-practicumopdracht
Compression=lzma
SolidCompression=yes
WizardStyle=modern
UninstallDisplayName={#AppName}
UninstallDisplayIcon={app}\{#AppIcon}
MinVersion=10.0.10240

[Languages]
Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "{#AppExeDir}\{#AppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#ProjectDir}\{#AppIcon}"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#ProjectDir}\Input\OpenJDK19U-jre_x64_windows_hotspot_19_36.msi"; DestDir: "{tmp}"; AfterInstall: RunJavaInstaller

[Icons]
Name: "{autoprograms}\{#AppName}"; Filename: "{app}\{#AppExeName}"; IconFilename: "{app}\{#AppIcon}"
Name: "{autodesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; IconFilename: "{app}\{#AppIcon}"; Tasks: desktopicon

[Registry]
Root: HKCU; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store"; ValueType: binary; ValueName: "{app}\unins000.exe"; Flags: dontcreatekey uninsdeletevalue

[Run]
Filename: "{app}\{#AppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(AppName, '&', '&&')}}"; Flags: shellexec postinstall skipifsilent

[UninstallDelete]
Type: filesandordirs; Name: "{localappdata}\Remzi Cavdar"

[Code]
procedure RunJavaInstaller;
var
  ErrorCode: Integer;
begin
  if not ShellExec('', 'msiexec.exe', ExpandConstant('/i "{tmp}\OpenJDK19U-jre_x64_windows_hotspot_19_36.msi" ADDLOCAL=FeatureMain,FeatureEnvironment,FeatureJarFileRunWith,FeatureJavaHome,FeatureOracleJavaSoft /qb'), '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode)
  then
    MsgBox('Java JRE installer failed to run!' + #13#10 + ' ' + SysErrorMessage(ErrorCode), mbError, MB_OK);
end;

This is what I'm trying to remove after uninstall: Windows Registry


Solution

  • I found a solution to my registry question. I needed to check for both 32-bit and 64-bit.

    [Registry]
    Root: HKCU; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store"; ValueType: binary; ValueName: "{app}\unins000.exe"; Flags: dontcreatekey uninsdeletevalue
    Root: HKCU64; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store"; ValueType: binary; ValueName: "{app}\unins000.exe"; Flags: dontcreatekey uninsdeletevalue; Check: IsWin64
    

    I found the answer here: Writing 32/64-bit specific registry key in Inno Setup and https://jrsoftware.org/ishelp/index.php?topic=registrysection also mention this with HKLM64 example, but I read things to fast to notice it.