ANN: Inno Setup 6.6.0 released

299 views
Skip to first unread message

Martijn Laan

unread,
Nov 12, 2025, 3:03:40 AM11/12/25
to innosetup
Hi everyone,

Inno Setup 6.6.0 has been released.

Highlights are:
  • Setup and Uninstall now support dark mode, forced or automatic, and custom styles.
  • See the updated WizardStyle help topic for more information, special considerations, and example screenshots.
  • Alternatively, check out the new Wizard Style page in the New Script Wizard, allowing to choose a style and view example screenshots.
  • High-contrast users stay supported: custom styles are automatically deactivated if Windows high-contrast theme is active, and a new /NOSTYLE command line parameter is also available.
This new feature does not increase the size of Setup if not used and is fully backward compatible.

And also:
  • Updated wizard defaults bring larger windows, Segoe UI fonts, DPI-aware aspect ratios, and retire WizardResizable, while keeping WizardSizePercent.
  • Pascal Script gains IsWinDark, IsDarkInstallMode, stock icon helpers, command link button support, revised CreateCustomForm, and new math and color utilities.
  • Security hardening doubles random characters in temp names, switches to CSPRNG generation, randomizes Uninstall directories, and fixes TOCTOU edge cases.
  • Compiler IDE refinements improve dark-mode contrast, use 9-point Segoe UI, and extend Windows 11 dark menu support, plus scripts now accept #rrggbb colors, have more /SUPPRESSMSGBOXES coverage, and auto-recreate missing temp folders in a specific scenario.
Download: https://www.jrsoftware.org/isdl.php

For the complete list of what's new/changed, see: What's new in this version?.

If you are using Inno Setup commercially, please purchase a license. Thank you to everyone who has already done so. Your support keeps development going. Donations also remain welcome.

Greetings,
Martijn Laan and Jordan Russell

Martijn Laan

unread,
Nov 20, 2025, 9:47:11 AM11/20/25
to 'Martijn Laan' via innosetup on [innosetup]
Hi,

Inno Setup 6.6.1 has been released.

Among other updates, this version improves custom styles by preserving custom RTF text colors and introduces a new [Files] flag, notimestamp, to make it easier to reproduce builds.


For the complete list of what's new/changed, see: What's new in this version?.

Download: https://www.jrsoftware.org/isdl.php

Using Inno Setup commercially? Please purchase a license.

Martijn Laan

unread,
Jan 6, 2026, 5:48:24 AMJan 6
to innosetup
Hi,

Inno Setup 6.7.0 has been released. 

Highlights of this version include:
For the complete list of changes, see: https://jrsoftware.org/files/is6-whatsnew.htm

Download: https://www.jrsoftware.org/isdl.php

Additionally, we’re happy to report that we’re making great progress on Inno Setup 7, which will include both 32-bit and 64-bit editions.

Inno Setup 7 can build either 32-bit or 64-bit installers. The 32-bit and 64-bit editions can be installed side by side, and both can coexist with Inno Setup 6.

This work would not have been possible without the support provided through the purchase of commercial licenses. Using Inno Setup commercially? Please purchase a license.

You can read more about Inno Setup 7 here: https://jrsoftware.github.io/issrc/whatsnew.htm

Please let us know on the forum if you have any questions or suggestions, or if you would like to test it yourself.

Happy New Year!

Eivind Bakkestuen

unread,
Jan 6, 2026, 5:08:27 PMJan 6
to inno...@googlegroups.com
Great news :)

--
You received this message because you are subscribed to the Google Groups "innosetup" group.
To unsubscribe from this group and stop receiving emails from it, send an email to innosetup+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/innosetup/176769649948.7.3577944849290592717.1103672010%40innosetup.nl.

Tommi Prami

unread,
Jan 7, 2026, 1:36:27 AMJan 7
to inno...@googlegroups.com
Yellow,

Nice! Thanks for this release.

-tee-

--

Alex Born

unread,
Jan 7, 2026, 6:41:52 AMJan 7
to innosetup
Hello!
Thanks for the new release.

Please explain how to use the style file and background image together.
I use the CodeClasses.iss script example.

If I specify a background image file, the controls do not accept the style.

WizardStyle=modern
WizardStyleFile=..\Styles\Glow.vsf
WizardBackImageFile=..\Images\BG_NOuter.png

001.png

If I remove the background image directive, the elements are styled according to the style file.

WizardStyle=modern
WizardStyleFile="..\Styles\Glow.vsf"

002.png

Why disable the style of controls when using a background image?
How do I enable the style of controls together with the background image?

With best wishes
среда, 7 января 2026 г. в 07:36:27 UTC+1, Tommi Prami:

Martijn Laan

unread,
Jan 7, 2026, 6:59:44 AMJan 7
to innosetup
Hi,

This is because of this (from the help file):
if a custom style is not specified by WizardStyle, it will automatically activate custom style windows11 with modifiers excludelightcontrols and hidebevels.

What you're seeing is the 'excludelightcontrols' modifier.

I agree it should check WizardStyleFile as well, but by mistake it doesn't at the moment apparently.

You can work around this by specifying windows11 in your WizardStyle directive, so WizardStyle=modern windows11

But this Glow style looks like a dark style to me, so I would recommend using this instead: WizardStyle=modern dark

That way you get dark icons, images and title bar, better matching the Glow style, and using dark mode also means excludelightcontrols has no effect.

See the example below.

Greetings,
Martijn

modern dark



modern windows11



Op 7-1-2026 om 12:41 schreef Alex Born:
Hello!
Thanks for the new release.

Please explain how to use the style file and background image together.
I use the CodeClasses.iss script example.

If I specify a background image file, the controls do not accept the style.

WizardStyle=modern
WizardStyleFile=..\Styles\Glow.vsf
WizardBackImageFile=..\Images\BG_NOuter.png


If I remove the background image directive, the elements are styled according to the style file.

WizardStyle=modern
WizardStyleFile="..\Styles\Glow.vsf"

Alex Born

unread,
Jan 7, 2026, 8:00:33 AMJan 7
to innosetup
Thanks for the explanation.

Yes, I read the help file, but I was confused by the phrase “custom style is not specified” because I use custom style and set it with the directive WizardStyleFile.

The Glow.vsf style is here as an 'custom style' example.

Therefore, in order to use the style file set by the WizardBackImageFile directive and the background image set by the WizardBackImageFile directive, it is necessary additionally specify the windows11 style in the WizardStyle directive.

:-)

среда, 7 января 2026 г. в 12:59:44 UTC+1, Martijn Laan:

Alex Born

unread,
Jan 7, 2026, 8:02:11 AMJan 7
to innosetup
Therefore, in order to use the style file set by the WizardStyleFile directive and the background image set by the WizardBackImageFile directive, it is necessary additionally specify the windows11 style in the WizardStyle directive.

среда, 7 января 2026 г. в 14:00:33 UTC+1, Alex Born:

Martijn Laan

unread,
Jan 7, 2026, 8:08:46 AMJan 7
to innosetup
Agreed, but note how it says "custom style is not specified by WizardStyle".

So it does not also check whether WizardStyleFile is set, which is a bug I will fix.

After this fix, bevels will reappear. If you do not want those, you should pre-emptively use this instead of my previous advice:

WizardStyle=modern dark hidebevels

Greetings,
Martijn

Op 7-1-2026 om 14:00 schreef Alex Born:

Martijn Laan

unread,
Feb 20, 2026, 3:29:18 AM (2 days ago) Feb 20
to innosetup
Hi,

Inno Setup 6.7.1 has been released. 


Highlights of this version include:
  • Compiler IDE: Improved section folding to allow folding of (entire) functions and procedures in the [Code] section.
  • Setup: Improved enumeration of the Windows PendingFileRenameOperations registry value.
    If you use restartreplace flags in your [Files] section, updating is recommended.
  • Setup: Added workaround for slower folder browsing on Windows 11 25H2.
  • ISPP: Added new support function EmitLanguagesSection, to generate a full [Languages] section for all available official languages, including English. Example: #expr EmitLanguagesSection.
    When possible, the Compiler IDE's New Script Wizard will use this function.
  • Added official Thai translation.

Martijn Laan

unread,
Feb 20, 2026, 3:40:16 AM (2 days ago) Feb 20
to inno...@googlegroups.com
Hi,

Inno Setup 7.0.0-preview-1 has been released:

We are proud to announce the first preview of Inno Setup 7, which includes a 64-bit edition, as well as a 32-bit edition.

Both editions of Inno Setup 7 can build either 32-bit or 64-bit installers, and they can be installed side by side, and they can coexist alongside Inno Setup 6.

Additionally, support for extended-length paths was added, removing MAX_PATH limitations.

Great care has been taken to ensure maximum backward compatibility with Inno Setup 6, including backward compatibility for the extended-length path support, and compatibility between 32-bit and 64-bit installers.

For the complete list of changes, see: https://jrsoftware.org/files/is7-whatsnew.htm

Download 64-bit edition: https://jrsoftware.org/download.php/innosetup-7.0.0-preview-1-x64.exe
Download 32-bit edition: https://jrsoftware.org/download.php/innosetup-7.0.0-preview-1-x86.exe

Using the 64-bit edition is recommended. As noted above, it can still build 32-bit installers.

Please test your scripts and installers with this preview, even if you do not intend to use 64-bit installers, and report success or failure here. Thank you in advance.

Please do not use this preview to build installers you will use in production.

Andrew Truckle

unread,
Feb 20, 2026, 11:13:06 AM (2 days ago) Feb 20
to innosetup

v7 seems to compile great. Just had to comment out the WPARAM etc as now built-in.

Andrew

Andrew Truckle

unread,
Feb 20, 2026, 11:21:07 AM (2 days ago) Feb 20
to inno...@googlegroups.com
I spoke too soon.

image.png

I get this error when my app runs after installer finishes.

Also, I had some custom code for rendering the progress different. I thought it was working but now nothign shows during install:

{ Definitions required for Progress File monitoring in a ListBox }
{ https://stackoverflow.com/a/64588818/2287576 }
{ Start }
const
    GWL_WNDPROC = -4;
    SB_VERT = 1;
    SB_BOTTOM = 7;
    WM_VSCROLL = $0115;
    WM_ERASEBKGND = $0014;

{ type }
    { WPARAM = UINT_PTR; }
    { LPARAM = LongInt; }
    { LRESULT = LongInt; }

type
  TSystemTime = record
    Year:         WORD;
    Month:        WORD;
    DayOfWeek:    WORD;
    Day:          WORD;
    Hour:         WORD;
    Minute:       WORD;
    Second:       WORD;
    Milliseconds: WORD;
  end;

var
    OldStatusLabelWndProc: LongInt;
    OldFilenameLabelWndProc: LongInt;
    OldProgressListBoxWndProc: LongInt;
    ProgressListBox: TNewListBox;
    PrevStatus: string;
    PrevFileName: string;

const
    LogLimit = 10;

function CallWindowProc(
    lpPrevWndFunc: LongInt; hWnd: HWND; Msg: UINT; wParam: WPARAM;
    lParam: LPARAM): LRESULT; external 'CallWin...@user32.dll stdcall';  

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: LongInt): LongInt;
    external 'SetWind...@user32.dll stdcall';

function FileTimeToSystemTime(
    FileTime: TFileTime; var SystemTime: TSystemTime): Boolean;
    external 'FileTimeTo...@kernel32.dll stdcall';

procedure GetSystemTime(var lpSystemTime: TSystemTime);
    external 'GetSys...@kernel32.dll';

procedure AddProgress(S: string);
begin
    if S <> '' then
    begin
        ProgressListBox.Items.Add(S);
        ProgressListBox.ItemIndex := ProgressListBox.Items.Count;
        SendMessage(ProgressListBox.Handle, WM_VSCROLL, SB_BOTTOM, 0);
    end;
end;

function StatusLabelWndProc(
    hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    Result := CallWindowProc(OldStatusLabelWndProc, hwnd, uMsg, wParam, lParam);
    if PrevStatus <> WizardForm.StatusLabel.Caption then
    begin
        AddProgress(WizardForm.StatusLabel.Caption);
        PrevStatus := WizardForm.StatusLabel.Caption;
    end;
end;

function FilenameLabelWndProc(
    hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    Result := CallWindowProc(OldFilenameLabelWndProc, hwnd, uMsg, wParam, lParam);
    if PrevFileName <> WizardForm.FilenameLabel.Caption then
    begin
        AddProgress(WizardForm.FilenameLabel.Caption);
        PrevFileName := WizardForm.FilenameLabel.Caption;
    end;
end;

function ProgressListBoxWndProc(
    hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    { reduce flicker }
    if uMsg = WM_ERASEBKGND then
    begin
        Result := 1;
    end
    else
    begin
        Result := CallWindowProc(OldProgressListBoxWndProc, hwnd, uMsg, wParam, lParam);
    end;
end;
{ See also: InitializeWizard and DeinitializeSetup }
{ End }

This is x64

--
You received this message because you are subscribed to a topic in the Google Groups "innosetup" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/innosetup/XLS5iqCc8Dw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to innosetup+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/innosetup/8c97a59c-caba-4b66-9deb-64e725a47c02n%40googlegroups.com.

Martijn Laan

unread,
Feb 20, 2026, 11:54:30 AM (2 days ago) Feb 20
to inno...@googlegroups.com
Hi,

Op 20-2-2026 om 17:20 schreef Andrew Truckle:
I get this error when my app runs after installer finishes.


Thanks for testing. Please share a script which reproduces the problem.


Also, I had some custom code for rendering the progress different. I thought it was working but now nothign shows during install:

This script is not correct for 64-bit. You should either keep SetupArchitecture on its default, or do a check of your custom [Code] when interacting with the Windows API.

For example, the script declares OldStatusLabelWndProc and others as LongInt but that makes it a 32-bit type always. Use NativeInt instead. 

Likewise, using SetWindowLong is suspect, as often you need to use SetWindowLongPtr instead. GWL_WNDPROC is simply invalid on 64-bit, see its documentation. You need to use GWLP_WNDPROC instead.

There's another bug in the script. This code is off by 1: ProgressListBox.ItemIndex := ProgressListBox.Items.Count

Greetings,
Martijn

Andrew Truckle

unread,
Feb 20, 2026, 1:16:12 PM (2 days ago) Feb 20
to inno...@googlegroups.com
Hi

For the first issue, this is my code that causes the crash:

procedure CurStepChanged(CurStep: TSetupStep);
var
    strLogFilePathName, strLogFileName, strNewFilePathName: String;
    LogPath: String;
    FileSystemTime, CurrentTime: TSystemTime;  
    FindRec: TFindRec;
    ImportRegResult: Integer;
begin
    if (CurStep = ssPostInstall) then
    begin
        if (FileExists(ExportRegPath)) then
        begin
            if (Exec(ExpandConstant('{sys}\reg.exe'), \
                    'import ' + ExportRegPath, \
                    '', SW_HIDE, ewWaitUntilTerminated, ImportRegResult)) then
            begin
                Log('Import registry result: ' + SysErrorMessage(ImportRegResult));
                Log('Import registry file: ' + ExportRegPath);
            end
            else begin
                Log('Import registry result: ' + SysErrorMessage(ImportRegResult));
            end;
        end;
    end
    else if (CurStep = ssDone) then
    begin
        GetSystemTime(CurrentTime);
        LogPath := ExpandConstant('{#CommonDataDir}\Installation Logs\');

        if FindFirst(LogPath + '*', FindRec) then
        begin
          try
            repeat
              if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
              begin
                FileTimeToSystemTime(FindRec.LastWriteTime, FileSystemTime);
                if (FileSystemTime.Year < CurrentTime.Year - 1) or
                   ((FileSystemTime.Year = CurrentTime.Year - 1) and
                    (FileSystemTime.Month < CurrentTime.Month)) or
                   ((FileSystemTime.Year = CurrentTime.Year - 1) and
                    (FileSystemTime.Month = CurrentTime.Month) and
                    (FileSystemTime.Day < CurrentTime.Day)) then
                begin
                  Log(Format('Log %s is too old (%d.%d.%d), deleting...', [
                    FindRec.Name, FileSystemTime.Day, FileSystemTime.Month,
                    FileSystemTime.Year]));
                  DeleteFile(LogPath + FindRec.Name);
                end
              end;
            until not FindNext(FindRec);
          finally
            FindClose(FindRec);
          end;
        end;

        strLogFilePathName := ExpandConstant('{log}');
        strLogFileName := ExtractFileName(strLogFilePathName);
        strNewFilePathName := LogPath + strLogFileName;

        CopyFile(strLogFilePathName, strNewFilePathName, false);
    end;
end;
For the other bits, I take on board what you say and confirm it works if I make the changes. As for the ItemIndex, I think it was intentional to prevent the selected row showing in blue. Just looks nicer without that showing.

--
You received this message because you are subscribed to a topic in the Google Groups "innosetup" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/innosetup/XLS5iqCc8Dw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to innosetup+...@googlegroups.com.

Martijn Laan

unread,
Feb 20, 2026, 2:59:42 PM (2 days ago) Feb 20
to inno...@googlegroups.com
Hi,

In your original post you do have this:


function FileTimeToSystemTime(FileTime: TFileTime; var SystemTime: TSystemTime): Boolean; external 'FileTimeTo...@kernel32.dll stdcall';

This prototype is wrong. According to the documentation, FileTimeToSystemTime takes pointers for both parameters, see https://learn.microsoft.com/en-us/windows/win32/api/timezoneapi/nf-timezoneapi-filetimetosystemtime

You declared only the second parameter as a pointer (var), but not the first.

You got lucky on 32-bit because a TFileTime record does not fit in a register, so it automatically passed a pointer instead. On 64-bit it does fit, so passing by value like your prototype specifies breaks the call.

The correct prototype is:

function FileTimeToSystemTime(var FileTime: TFileTime; var SystemTime: TSystemTime): Boolean; external 'FileTimeTo...@kernel32.dll stdcall';

Also, the code should check the return value of FileTimeToSystemTime before using FileSystemTime.


As for the ItemIndex, I think it was intentional to prevent the selected row showing in blue.

Since ItemIndex is zero-based, the maximum valid value is Count - 1. If you do not want any selection, set ItemIndex to -1.

Best regards,
Martijn

Op 20-2-2026 om 19:16 schreef Andrew Truckle:
You received this message because you are subscribed to the Google Groups "innosetup" group.
To unsubscribe from this group and stop receiving emails from it, send an email to innosetup+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/innosetup/CAKSr1pfAGsA%3Ds6X49Aj7vx_OcPZLd6PTjMQVCTA%2BBS%2B523E%3DGA%40mail.gmail.com.

Andrew Truckle

unread,
Feb 20, 2026, 3:18:18 PM (2 days ago) Feb 20
to inno...@googlegroups.com
Thanks, I still seem to have teh same problem. I decided to try some temp code:

function GetFileLastWriteTime(const FileName: string): String;
var
  FindRec: TFindRec;
begin
  Result := '';
  if FindFirst(FileName, FindRec) then
  begin
    try
      Result := GetFileDateTimeString(FileName, 'dd/mm/yyyy hh:nn:ss', '-', ':');
      // FindRec.LastWriteTime;
    finally
      FindClose(FindRec);
    end;
  end
  else
  begin
    Log('Could not find file ' + FileName);
  end;
end;

procedure ScanRootOfC;
var
  FindRec: TFindRec;
  FullPath: string;
  Timestamp: Integer;
begin
  Log('--- Scanning C:\ top level ---');

  if FindFirst('C:\*', FindRec) then
  begin
    try
      repeat
        FullPath := 'C:\' + FindRec.Name;

        // Skip "." and ".."
        if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
        begin
          Timestamp := GetFileLastWriteTime(FullPath);
          Log(Format('%s  ->  LastWriteTime=%d', [FullPath, Timestamp]));

        end;

      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;
  end
  else
    Log('Could not enumerate C:\');
end;

But for some reason in v7 it tells me that GetFileDateTimeString is unknown. Even though it is in the docs.

Martijn Laan

unread,
Feb 20, 2026, 3:22:01 PM (2 days ago) Feb 20
to inno...@googlegroups.com
GetFileDateTimeString is in the docs, but as an ISPP function. 

-------- Original Message --------

Andrew Truckle

unread,
Feb 20, 2026, 3:36:08 PM (2 days ago) Feb 20
to inno...@googlegroups.com
Ah, OK. Thanks.

I used DeepSeek to flesh out my code a bit:

procedure CurStepChanged(CurStep: TSetupStep);
var
    strLogFilePathName, strLogFileName, strNewFilePathName: String;
    LogPath: String;
    FileSystemTime, CurrentTime: TSystemTime;  
    FindRec: TFindRec;
    ImportRegResult: Integer;
    FindResult: Boolean;
    FindActive: Boolean;  // Track if Find is active
begin
    // Initialize tracking variable
    FindActive := False;
   
    // Use a try-except block to catch any exceptions
    try

        if (CurStep = ssPostInstall) then
        begin
            if (FileExists(ExportRegPath)) then
            begin
                Log('Attempting to import registry file: ' + ExportRegPath);

                if (Exec(ExpandConstant('{sys}\reg.exe'), \
                        'import "' + ExportRegPath + '"', \

                        '', SW_HIDE, ewWaitUntilTerminated, ImportRegResult)) then
                begin
                    Log('Registry import completed with result code: ' + IntToStr(ImportRegResult));
                    if ImportRegResult = 0 then
                        Log('Registry import successful')
                    else
                        Log('Registry import may have failed with code: ' + IntToStr(ImportRegResult));
                end
                else
                begin
                    Log('Failed to execute reg.exe for import');
                end;
            end
            else
            begin
                Log('Registry export file not found: ' + ExportRegPath);

            end;
        end
        else if (CurStep = ssDone) then
        begin
            GetSystemTime(CurrentTime);
            LogPath := ExpandConstant('{#CommonDataDir}\Installation Logs\');
           
            Log('Current system time: ' + IntToStr(CurrentTime.Year) + '/' +
                IntToStr(CurrentTime.Month) + '/' + IntToStr(CurrentTime.Day));
           
            // Ensure log directory exists
            Log('Checking log directory: ' + LogPath);
            if not DirExists(LogPath) then
            begin
                Log('Log directory does not exist, creating...');
                if ForceDirectories(LogPath) then
                    Log('Successfully created log directory: ' + LogPath)
                else
                    Log('Failed to create log directory: ' + LogPath);
            end
            else
                Log('Log directory already exists: ' + LogPath);

            // FIRST: Copy current installation log (do this before file search to ensure it's saved)

            strLogFilePathName := ExpandConstant('{log}');
            Log('Current installation log path: "' + strLogFilePathName + '"');
           
            if strLogFilePathName <> '' then
            begin

                strLogFileName := ExtractFileName(strLogFilePathName);
                strNewFilePathName := LogPath + strLogFileName;
               
                Log(Format('Copying log from "%s" to "%s"', [strLogFilePathName, strNewFilePathName]));
               
                if FileExists(strLogFilePathName) then
                begin
                    Log('Source log file exists');
                    if CopyFile(strLogFilePathName, strNewFilePathName, False) then
                        Log('Successfully copied installation log to: ' + strNewFilePathName)
                    else
                        Log('Failed to copy installation log');
                end
                else
                    Log('Source log file does not exist: ' + strLogFilePathName);
            end
            else
                Log('{log} constant returned empty string - no installation log available');
           
            // THEN: Search for old log files to delete (with minimal operations)
            Log('Starting search for old log files...');
           
            // Limit the search to log files only to reduce the number of items processed
            FindResult := FindFirst(LogPath + 'Setup Log *.txt', FindRec);
           
            if FindResult then
            begin
                FindActive := True;
                Log('FindFirst succeeded, processing files...');
               
                repeat
                    // Skip current directory (.) and parent directory (..)

                    if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
                    begin
                        // Quick check: if it's a file (not a directory)
                        if (FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) then
                        begin
                            // Check if file is from last year or earlier
                            if (FindRec.LastWriteTime.dwLowDateTime <> 0) or
                               (FindRec.LastWriteTime.dwHighDateTime <> 0) then
                            begin
                                if FileTimeToSystemTime(FindRec.LastWriteTime, FileSystemTime) then
                                begin
                                    // Simplified check - delete if from previous year
                                    if FileSystemTime.Year < CurrentTime.Year then
                                    begin
                                        Log(Format('Deleting old file: %s from year %d', [
                                            FindRec.Name, FileSystemTime.Year]));

                                        DeleteFile(LogPath + FindRec.Name);
                                    end;
                                end;
                            end;

                        end;
                    end;
                until not FindNext(FindRec);
               
                Log('Finished processing files');
            end
            else
            begin
                Log('No files found matching pattern: ' + LogPath + 'Setup Log *.txt');
            end;
        end;
    except
        Log('Exception caught in CurStepChanged');
        // Log the exception message if possible
        // Note: GetExceptionMessage may not be available in all InnoSetup versions
    end;
   
    // Ensure Find is closed if it was opened
    if FindActive then
    begin
        try
            FindClose(FindRec);
            Log('FindClose called in finally section');
        except
            Log('Exception during FindClose');
        end;
    end;
end;

When I run this it does work. BUt it is the final cleanup that flags the problem:

[20:32:10.750]   -- Run entry --
[20:32:10.755]   Run as: Original user
[20:32:10.756]   Type: Exec
[20:32:10.759]   Filename: C:\Program Files\Meeting Schedule Assistant\MeetSchedAssist.exe
[20:32:10.982]   Current system time: 2026/2/20
[20:32:10.988]   Checking log directory: C:\ProgramData\Meeting Schedule Assistant (x64)\Installation Logs\
[20:32:10.990]   Log directory already exists: C:\ProgramData\Meeting Schedule Assistant (x64)\Installation Logs\
[20:32:10.990]   Current installation log path: "C:\Users\ajtru\AppData\Local\Temp\Setup Log 2026-02-20 #015.txt"
[20:32:10.996]   Copying log from "C:\Users\ajtru\AppData\Local\Temp\Setup Log 2026-02-20 #015.txt" to "C:\ProgramData\Meeting Schedule Assistant (x64)\Installation Logs\Setup Log 2026-02-20 #015.txt"
[20:32:11.003]   Source log file exists
[20:32:11.003]   Successfully copied installation log to: C:\ProgramData\Meeting Schedule Assistant (x64)\Installation Logs\Setup Log 2026-02-20 #015.txt
[20:32:11.003]   Starting search for old log files...
[20:32:11.003]   FindFirst succeeded, processing files...
[20:32:11.016]   Deleting old file: Setup Log 2025-02-20 #001.txt from year 2025
[20:32:11.022]   Deleting old file: Setup Log 2025-02-20 #002.txt from year 2025
[20:32:11.024]   Deleting old file: Setup Log 2025-02-21 #001.txt from year 2025
[20:32:11.024]   Deleting old file: Setup Log 2025-02-23 #001.txt from year 2025
[20:32:11.028]   Deleting old file: Setup Log 2025-02-25 #001.txt from year 2025
[20:32:11.030]   Deleting old file: Setup Log 2025-03-03 #001.txt from year 2025
[20:32:11.032]   Deleting old file: Setup Log 2025-03-04 #001.txt from year 2025
[20:32:11.033]   Deleting old file: Setup Log 2025-03-04 #002.txt from year 2025
[20:32:11.035]   Deleting old file: Setup Log 2025-03-06 #001.txt from year 2025
[20:32:11.037]   Deleting old file: Setup Log 2025-03-07 #001.txt from year 2025
[20:32:11.039]   Deleting old file: Setup Log 2025-03-07 #002.txt from year 2025
[20:32:11.041]   Deleting old file: Setup Log 2025-03-08 #001.txt from year 2025
[20:32:11.042]   Deleting old file: Setup Log 2025-03-10 #001.txt from year 2025
[20:32:11.042]   Deleting old file: Setup Log 2025-03-13 #001.txt from year 2025
[20:32:11.042]   Deleting old file: Setup Log 2025-03-14 #002.txt from year 2025
[20:32:11.049]   Deleting old file: Setup Log 2025-03-18 #001.txt from year 2025
[20:32:11.050]   Deleting old file: Setup Log 2025-03-21 #001.txt from year 2025
[20:32:11.054]   Deleting old file: Setup Log 2025-03-30 #001.txt from year 2025
[20:32:11.055]   Deleting old file: Setup Log 2025-04-03 #001.txt from year 2025
[20:32:11.058]   Deleting old file: Setup Log 2025-04-07 #001.txt from year 2025
[20:32:11.058]   Deleting old file: Setup Log 2025-05-01 #001.txt from year 2025
[20:32:11.058]   Deleting old file: Setup Log 2025-05-12 #001.txt from year 2025
[20:32:11.064]   Deleting old file: Setup Log 2025-05-12 #002.txt from year 2025
[20:32:11.064]   Deleting old file: Setup Log 2025-05-12 #003.txt from year 2025
[20:32:11.064]   Deleting old file: Setup Log 2025-05-13 #001.txt from year 2025
[20:32:11.064]   Deleting old file: Setup Log 2025-06-01 #001.txt from year 2025
[20:32:11.064]   Deleting old file: Setup Log 2025-06-01 #002.txt from year 2025
[20:32:11.064]   Deleting old file: Setup Log 2025-06-03 #001.txt from year 2025
[20:32:11.074]   Deleting old file: Setup Log 2025-06-03 #002.txt from year 2025
[20:32:11.082]   Deleting old file: Setup Log 2025-06-03 #003.txt from year 2025
[20:32:11.084]   Deleting old file: Setup Log 2025-06-14 #001.txt from year 2025
[20:32:11.084]   Deleting old file: Setup Log 2025-06-17 #001.txt from year 2025
[20:32:11.084]   Deleting old file: Setup Log 2025-06-18 #001.txt from year 2025
[20:32:11.090]   Deleting old file: Setup Log 2025-06-21 #001.txt from year 2025
[20:32:11.090]   Deleting old file: Setup Log 2025-06-21 #002.txt from year 2025
[20:32:11.094]   Deleting old file: Setup Log 2025-06-21 #003.txt from year 2025
[20:32:11.094]   Deleting old file: Setup Log 2025-06-22 #002.txt from year 2025
[20:32:11.094]   Deleting old file: Setup Log 2025-06-23 #001.txt from year 2025
[20:32:11.094]   Deleting old file: Setup Log 2025-06-23 #002.txt from year 2025
[20:32:11.094]   Deleting old file: Setup Log 2025-06-23 #003.txt from year 2025
[20:32:11.094]   Deleting old file: Setup Log 2025-06-24 #001.txt from year 2025
[20:32:11.094]   Deleting old file: Setup Log 2025-06-24 #002.txt from year 2025
[20:32:11.106]   Deleting old file: Setup Log 2025-06-25 #001.txt from year 2025
[20:32:11.106]   Deleting old file: Setup Log 2025-06-26 #002.txt from year 2025
[20:32:11.111]   Deleting old file: Setup Log 2025-06-27 #001.txt from year 2025
[20:32:11.111]   Deleting old file: Setup Log 2025-06-27 #002.txt from year 2025
[20:32:11.115]   Deleting old file: Setup Log 2025-06-27 #003.txt from year 2025
[20:32:11.116]   Deleting old file: Setup Log 2025-06-29 #001.txt from year 2025
[20:32:11.116]   Deleting old file: Setup Log 2025-06-29 #002.txt from year 2025
[20:32:11.116]   Deleting old file: Setup Log 2025-06-29 #003.txt from year 2025
[20:32:11.122]   Deleting old file: Setup Log 2025-06-30 #001.txt from year 2025
[20:32:11.124]   Deleting old file: Setup Log 2025-06-30 #002.txt from year 2025
[20:32:11.124]   Deleting old file: Setup Log 2025-06-30 #003.txt from year 2025
[20:32:11.124]   Deleting old file: Setup Log 2025-06-30 #004.txt from year 2025
[20:32:11.130]   Deleting old file: Setup Log 2025-07-04 #001.txt from year 2025
[20:32:11.132]   Deleting old file: Setup Log 2025-07-08 #001.txt from year 2025
[20:32:11.134]   Deleting old file: Setup Log 2025-07-10 #001.txt from year 2025
[20:32:11.134]   Deleting old file: Setup Log 2025-07-10 #002.txt from year 2025
[20:32:11.136]   Deleting old file: Setup Log 2025-07-23 #001.txt from year 2025
[20:32:11.139]   Deleting old file: Setup Log 2025-07-24 #002.txt from year 2025
[20:32:11.140]   Deleting old file: Setup Log 2025-07-25 #001.txt from year 2025
[20:32:11.142]   Deleting old file: Setup Log 2025-07-25 #002.txt from year 2025
[20:32:11.143]   Deleting old file: Setup Log 2025-07-27 #001.txt from year 2025
[20:32:11.145]   Deleting old file: Setup Log 2025-07-27 #002.txt from year 2025
[20:32:11.147]   Deleting old file: Setup Log 2025-07-27 #003.txt from year 2025
[20:32:11.149]   Deleting old file: Setup Log 2025-07-27 #004.txt from year 2025
[20:32:11.150]   Deleting old file: Setup Log 2025-07-27 #005.txt from year 2025
[20:32:11.152]   Deleting old file: Setup Log 2025-07-28 #001.txt from year 2025
[20:32:11.155]   Deleting old file: Setup Log 2025-07-29 #001.txt from year 2025
[20:32:11.157]   Deleting old file: Setup Log 2025-07-30 #001.txt from year 2025
[20:32:11.157]   Deleting old file: Setup Log 2025-08-02 #001.txt from year 2025
[20:32:11.157]   Deleting old file: Setup Log 2025-08-03 #001.txt from year 2025
[20:32:11.157]   Deleting old file: Setup Log 2025-08-04 #001.txt from year 2025
[20:32:11.164]   Deleting old file: Setup Log 2025-08-07 #001.txt from year 2025
[20:32:11.164]   Deleting old file: Setup Log 2025-08-07 #002.txt from year 2025
[20:32:11.168]   Deleting old file: Setup Log 2025-08-07 #003.txt from year 2025
[20:32:11.171]   Deleting old file: Setup Log 2025-08-07 #004.txt from year 2025
[20:32:11.171]   Deleting old file: Setup Log 2025-08-07 #005.txt from year 2025
[20:32:11.175]   Deleting old file: Setup Log 2025-08-07 #006.txt from year 2025
[20:32:11.175]   Deleting old file: Setup Log 2025-08-10 #001.txt from year 2025
[20:32:11.175]   Deleting old file: Setup Log 2025-08-12 #001.txt from year 2025
[20:32:11.182]   Deleting old file: Setup Log 2025-09-02 #001.txt from year 2025
[20:32:11.182]   Deleting old file: Setup Log 2025-09-08 #001.txt from year 2025
[20:32:11.184]   Deleting old file: Setup Log 2025-09-28 #001.txt from year 2025
[20:32:11.184]   Deleting old file: Setup Log 2025-10-04 #001.txt from year 2025
[20:32:11.189]   Deleting old file: Setup Log 2025-10-05 #001.txt from year 2025
[20:32:11.191]   Deleting old file: Setup Log 2025-10-05 #002.txt from year 2025
[20:32:11.191]   Deleting old file: Setup Log 2025-10-06 #001.txt from year 2025
[20:32:11.191]   Deleting old file: Setup Log 2025-10-08 #001.txt from year 2025
[20:32:11.191]   Deleting old file: Setup Log 2025-10-08 #002.txt from year 2025
[20:32:11.191]   Deleting old file: Setup Log 2025-10-08 #004.txt from year 2025
[20:32:11.201]   Deleting old file: Setup Log 2025-10-11 #002.txt from year 2025
[20:32:11.201]   Deleting old file: Setup Log 2025-10-11 #005.txt from year 2025
[20:32:11.201]   Deleting old file: Setup Log 2025-10-12 #001.txt from year 2025
[20:32:11.206]   Deleting old file: Setup Log 2025-10-12 #002.txt from year 2025
[20:32:11.208]   Deleting old file: Setup Log 2025-10-13 #001.txt from year 2025
[20:32:11.212]   Deleting old file: Setup Log 2025-10-14 #002.txt from year 2025
[20:32:11.214]   Deleting old file: Setup Log 2025-10-17 #001.txt from year 2025
[20:32:11.215]   Deleting old file: Setup Log 2025-10-18 #001.txt from year 2025
[20:32:11.216]   Deleting old file: Setup Log 2025-10-20 #001.txt from year 2025
[20:32:11.216]   Deleting old file: Setup Log 2025-10-23 #001.txt from year 2025
[20:32:11.222]   Deleting old file: Setup Log 2025-10-23 #003.txt from year 2025
[20:32:11.224]   Deleting old file: Setup Log 2025-11-03 #001.txt from year 2025
[20:32:11.224]   Deleting old file: Setup Log 2025-11-06 #001.txt from year 2025
[20:32:11.224]   Deleting old file: Setup Log 2025-11-07 #001.txt from year 2025
[20:32:11.231]   Deleting old file: Setup Log 2025-11-07 #002.txt from year 2025
[20:32:11.232]   Deleting old file: Setup Log 2025-11-08 #001.txt from year 2025
[20:32:11.235]   Deleting old file: Setup Log 2025-11-10 #001.txt from year 2025
[20:32:11.236]   Deleting old file: Setup Log 2025-11-10 #002.txt from year 2025
[20:32:11.238]   Deleting old file: Setup Log 2025-11-12 #001.txt from year 2025
[20:32:11.240]   Deleting old file: Setup Log 2025-11-13 #001.txt from year 2025
[20:32:11.242]   Deleting old file: Setup Log 2025-11-14 #001.txt from year 2025
[20:32:11.245]   Deleting old file: Setup Log 2025-11-14 #002.txt from year 2025
[20:32:11.247]   Deleting old file: Setup Log 2025-11-14 #003.txt from year 2025
[20:32:11.249]   Deleting old file: Setup Log 2025-11-15 #001.txt from year 2025
[20:32:11.251]   Deleting old file: Setup Log 2025-11-17 #001.txt from year 2025
[20:32:11.253]   Deleting old file: Setup Log 2025-11-18 #001.txt from year 2025
[20:32:11.254]   Deleting old file: Setup Log 2025-11-19 #002.txt from year 2025
[20:32:11.255]   Deleting old file: Setup Log 2025-11-23 #001.txt from year 2025
[20:32:11.258]   Deleting old file: Setup Log 2025-12-01 #001.txt from year 2025
[20:32:11.260]   Deleting old file: Setup Log 2025-12-15 #001.txt from year 2025
[20:32:11.262]   Deleting old file: Setup Log 2025-12-17 #002.txt from year 2025
[20:32:11.262]   Deleting old file: Setup Log 2025-12-18 #001.txt from year 2025
[20:32:11.264]   Deleting old file: Setup Log 2025-12-18 #002.txt from year 2025
[20:32:11.266]   Deleting old file: Setup Log 2025-12-18 #003.txt from year 2025
[20:32:11.266]   Deleting old file: Setup Log 2025-12-18 #004.txt from year 2025
[20:32:11.266]   Deleting old file: Setup Log 2025-12-18 #005.txt from year 2025
[20:32:11.266]   Deleting old file: Setup Log 2025-12-19 #005.txt from year 2025
[20:32:11.275]   Deleting old file: Setup Log 2025-12-19 #006.txt from year 2025
[20:32:11.277]   Deleting old file: Setup Log 2025-12-19 #007.txt from year 2025
[20:32:11.277]   Deleting old file: Setup Log 2025-12-20 #001.txt from year 2025
[20:32:11.277]   Deleting old file: Setup Log 2025-12-20 #002.txt from year 2025
[20:32:11.282]   Deleting old file: Setup Log 2025-12-21 #001.txt from year 2025
[20:32:11.282]   Deleting old file: Setup Log 2025-12-21 #002.txt from year 2025
[20:32:11.282]   Deleting old file: Setup Log 2025-12-21 #003.txt from year 2025
[20:32:11.288]   Deleting old file: Setup Log 2025-12-21 #004.txt from year 2025
[20:32:11.288]   Deleting old file: Setup Log 2025-12-22 #001.txt from year 2025
[20:32:11.292]   Deleting old file: Setup Log 2025-12-22 #002.txt from year 2025
[20:32:11.292]   Deleting old file: Setup Log 2025-12-23 #001.txt from year 2025
[20:32:11.292]   Deleting old file: Setup Log 2025-12-24 #001.txt from year 2025
[20:32:11.297]   Deleting old file: Setup Log 2025-12-24 #002.txt from year 2025
[20:32:11.297]   Deleting old file: Setup Log 2025-12-24 #003.txt from year 2025
[20:32:11.297]   Deleting old file: Setup Log 2025-12-25 #001.txt from year 2025
[20:32:11.297]   Deleting old file: Setup Log 2025-12-25 #002.txt from year 2025
[20:32:11.297]   Deleting old file: Setup Log 2025-12-25 #003.txt from year 2025
[20:32:11.305]   Deleting old file: Setup Log 2025-12-27 #001.txt from year 2025
[20:32:11.308]   Deleting old file: Setup Log 2025-12-27 #002.txt from year 2025
[20:32:11.308]   Deleting old file: Setup Log 2025-12-27 #003.txt from year 2025
[20:32:11.308]   Deleting old file: Setup Log 2025-12-27 #004.txt from year 2025
[20:32:11.315]   Deleting old file: Setup Log 2025-12-28 #001.txt from year 2025
[20:32:11.315]   Deleting old file: Setup Log 2025-12-29 #001.txt from year 2025
[20:32:11.315]   Deleting old file: Setup Log 2025-12-31 #001.txt from year 2025
[20:32:11.324]   Finished processing files
[20:32:11.327]   FindClose called in finally section
[20:32:11.327]   CurStepChanged raised an exception.
[20:32:11.327]   Exception message:
[20:32:11.327]   Message box (OK):
Access violation at address 0000000000A8130B in module 'MeetSchedAssistSetup_x64.tmp' (offset 1130B). Read of address FFFFFFFFFFFFFFFF.
[20:32:15.596]   User chose OK.
[20:32:15.604]   Deinitializing Setup.
[20:32:15.665]   *** Setup exit code: 0



Martijn Laan

unread,
Feb 20, 2026, 3:56:10 PM (2 days ago) Feb 20
to inno...@googlegroups.com
Hi,

I don't see anything wrong with this code at first glance, but it's also still incomplete so maybe the problem lies elsewhere in the script.

You could try to take out bits until the problem disappears as a way to locate the problem location, or you could try to create a version which is complete and reproduces the problem when someone else like me compiles and runs it. The versions you posted so far all cause compiler errors due to being incomplete.

Greetings,
Martijn 




-------- Original Message --------

Andrew Truckle

unread,
Feb 20, 2026, 4:15:55 PM (2 days ago) Feb 20
to innosetup
If I remove the SetupArchitecture=x64 then it works.
If I include the SetupArchitecture=x64 then it will have access violation.

TestInstall.iss

mashispano

unread,
Feb 20, 2026, 7:05:28 PM (2 days ago) Feb 20
to inno...@googlegroups.com
Hi guys
I recently updated to ver 6.xx from version 5.xx and now my app icon it doesn't show in the installed apps like it used to with prev version of inno 5

Please advise 

Al

Andrew Truckle

unread,
Feb 21, 2026, 6:44:22 AM (22 hours ago) Feb 21
to inno...@googlegroups.com
Sorry I did not state that I attached a sample to my last message that reproduced the issue. Sorry if that was not clear. 

Andy

weirdo12

unread,
Feb 21, 2026, 8:42:00 PM (8 hours ago) Feb 21
to inno...@googlegroups.com
Are you referring to the uninstall icon?
Reply all
Reply to author
Forward
0 new messages