-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Expand file tree
/
Copy pathwhatsnew.htm
More file actions
1452 lines (1346 loc) · 136 KB
/
Copy pathwhatsnew.htm
File metadata and controls
1452 lines (1346 loc) · 136 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Inno Setup 7 Revision History</title>
<base href="https://jrsoftware.org/" />
<style type="text/css">
:root {
color-scheme: light dark;
--main-fg-color: light-dark(#282828, #d6d6d6);
--main-bg-color: light-dark(white, #1f1f1f);
--link-fg-color: light-dark(hsl(206, 100%, 37%), hsl(206, 100%, 50%));
--link-hover-fg-color: light-dark(hsl(206, 100%, 27%), hsl(206, 100%, 43%));
--code-bg-color: light-dark(#f0f0f0, #353135);
}
body { font: calc(14rem/16)/1.5 "Segoe UI", sans-serif; color: var(--main-fg-color); background-color: var(--main-bg-color) }
a:link, a:visited { color: var(--link-fg-color); background-color: transparent; text-decoration: none }
a[href]:hover { color: var(--link-hover-fg-color); text-decoration: underline }
tt, pre { font: calc(13rem/16)/calc(21rem/16) monospace; color: inherit; background-color: var(--code-bg-color) }
tt { padding: 2px 4px; border-radius: 4px }
pre { line-height: normal; padding: 10px; border-radius: 6px; overflow-x: auto }
li, li > p, div.limargins { margin-block: calc(5rem/16) }
div.bluehead { text-align: center; color: white; background-color: hsl(206, 100%, 30%); padding: 5px; font-weight: bold; line-height: normal }
details { margin-block: 1em }
summary { font-size: calc(20rem/16); font-weight: bold; color: inherit; background-color: var(--code-bg-color);
padding: 0.25em 0.5em; border-radius: 6px; box-shadow: 0 1px 2px #808080; cursor: pointer; user-select: none }
.date { font-size: calc(11rem/16); font-weight: bold }
.head1 { font-size: calc(32rem/16) }
.head2 { font-size: calc(20rem/16) }
.ver { font-size: calc(20rem/16); font-weight: bold }
code.innosetup sec { font-weight: bold }
code.innosetup evt { font-weight: bold }
code.innosetup key { color: light-dark(#0078d4, #0088f0) }
code.innosetup com { color: light-dark(#2d862d, #339933) }
code.innosetup con { color: light-dark(#9262a8, #a278b5) }
code.innosetup ispp { color: light-dark(#d24152, #d95e6c) }
code.innosetup str { color: light-dark(#c55420, #f09060) }
code.innosetup num { color: light-dark(#c55420, #f09060) }
</style>
</head>
<body>
<div class="bluehead"><span class="head1">Inno Setup 7</span><br /><span class="head2">Revision History</span></div>
<p>Copyright © 1997-2026 <a href="./">Jordan Russell</a>. All rights reserved.<br />
Portions Copyright © 2000-2026 Martijn Laan. All rights reserved.<br />
For conditions of distribution and use, see <tt><a href="files/is/license.txt">LICENSE.TXT</a></tt>.
</p>
<p><b>Want to be notified by e-mail of new Inno Setup releases?</b> <a href="ismail.php">Subscribe</a> to the Inno Setup Mailing List!</p>
<details open="">
<summary>Inno Setup 7.1</summary>
<p><a name="7.1.0"></a><span class="ver">7.1.0 </span><span class="date">(2026-08-12)</span></p>
<p><b>Using Inno Setup commercially?</b> Please <a href="https://jrsoftware.org/isorder.php">purchase a license</a>.</p>
<!-- <p>Thank you to everyone who has already <a href="https://jrsoftware.org/isorder.php">purchased a commercial license</a>. Your support is very important to our ongoing development.</p> -->
<span class="head2">Compiler IDE improvements</span>
<p>The Compiler IDE is now also available in German, Japanese, Czech, and Dutch. German, Japanese, and Czech were chosen first because of the strong commercial support from their users, relative to the size of their communities. Thank you.</p>
<p>Additionally, a new <i>RTF Editor</i> was added, as well as options to temporarily disable time-consuming compilation steps for faster debugging. In detail:</p>
<ul>
<li>Added new <i>Language</i> option to display the Compiler IDE in English (the default), German, Japanese, Czech, or Dutch.
<ul>
<li>This applies to the Compiler IDE only. The command-line compiler (ISCC) and the compiler itself remain English.</li>
<li>The translations cannot be edited, and additional languages are not being accepted.</li>
</ul>
</li>
<li>Added a new <i>RTF Editor</i> to the <i>Tools</i> menu for creating the RTF files Setup can display. It renders text exactly as Setup will, making it a small built-in replacement for the beloved WordPad that is no more.</li>
<li>Added new <i>Disable Output</i>, <i>Disable Compression</i>, <i>Disable Signing</i>, and <i>Disable Signcheck Validation</i> menu items to the <i>Build</i> menu. These are not remembered between sessions.</li>
</ul>
<p>There are also smaller Compiler IDE improvements:</p>
<ul>
<li>Compiler errors are now also shown in the <i>Compiler Output</i> view, instead of only in a message box.</li>
<li>The status bar now shows information about the current selection when text is selected, instead of only the cursor position.</li>
<li>Removed or reduced flicker (especially visible in dark mode) at startup and when opening dialogs.</li>
<li>Improved support for screen readers: toolbar buttons are now announced.</li>
<li>Shift+F6 now switches backward between the active memo, the active bottom pane, and the active banner, the reverse of F6.</li>
<li><i>Fix:</i> <i>Find in Files</i> now works correctly on lines containing non-ASCII text.</li>
<li>Compiler IDE command line:
<ul>
<li>Options are now documented with a <tt>-</tt> prefix and in lowercase (for example <tt>-wizard</tt> instead of <tt>/WIZARD</tt>). Both forms are accepted, so existing use is not affected.</li>
<li>Options now have long-form alternatives (for example <tt>--compile</tt> for <tt>-cc</tt>).</li>
<li><i>Fix:</i> When using the <tt>-cc</tt> option, the IDE caption now shows the file being compiled.</li>
</ul>
</li>
</ul>
<span class="head2">Documentation improvements</span>
<ul>
<li>Throughout the help file, all script examples are now syntax highlighted and all code identifiers are now monospaced.</li>
<li>Throughout the help file, all <tt>[Setup]</tt> section directives, section names, and Pascal Scripting support function names are now linked to their documentation.</li>
<li>The <tt>[Setup]</tt> section <a href="https://jrsoftware.org/ishelp/index.php?topic=setupsection">help topic</a> now uses a larger set of categories to divide the directives into.</li>
</ul>
<span class="head2">Command-Line Compiler (ISCC) improvements</span>
<p>The command-line compiler has been improved to make it easier for other tools and scripts to use. All existing options keep working, but note that warnings now go to <tt>stderr</tt> and that ISPP option <tt>-$e</tt> now defaults to on:</p>
<ul>
<li>Options are now documented with a <tt>-</tt> prefix and in lowercase (for example <tt>-q</tt> instead of <tt>/Q</tt>). Both forms were already accepted, so existing use is not affected.</li>
<li>Options now have long-form alternatives (for example <tt>--quiet</tt> for <tt>-q</tt>), except for <tt>-$</tt> and <tt>-p</tt>.</li>
<li>Added new <tt>--no-compression</tt> (<tt>-nc</tt>) option to disable compression (overrides <tt>Compression</tt> and <tt>InternalCompressLevel</tt>).</li>
<li>Added new <tt>--no-signing</tt> (<tt>-ns</tt>) option to disable signing (overrides <tt>SignTool</tt> and <tt>SignedUninstaller</tt>).</li>
<li>Added new <tt>--no-signcheck</tt> (<tt>-nsc</tt>) option to disable <tt>signcheck</tt> validation.</li>
<li>Added new <tt>--no-ide-signtools</tt> (<tt>-ni</tt>) option to not auto-specify Sign Tools configured using the Compiler IDE.</li>
<li>Added new <tt>--preprocess</tt> (<tt>-e</tt>) option to preprocess to <tt>stdout</tt> and suppress compilation.</li>
<li>Added new <tt>--messages-jsonl</tt> (<tt>-mj</tt>) option to output errors and warnings in JSONL format, making them easier to parse by tools and scripts. Warnings are not suppressed by <tt>--quiet</tt> when <tt>--messages-jsonl</tt> is active.</li>
<li>Added new <tt>--version</tt> option to print the compiler engine version.</li>
<li>Improved the <tt>--quiet-progress</tt> (<tt>-qp</tt>) option, especially progress not updating when the screen is full in Windows Terminal.</li>
<li>Warnings are now always written to <tt>stderr</tt> instead of <tt>stdout</tt>, consistent with other tools.</li>
<li><i>Fix:</i> ISPP option <tt>-$e</tt> (emit empty lines) now defaults to on, just like when compiling from the Compiler IDE and like the documentation said.</li>
<li>Other minor fixes.</li>
</ul>
<span class="head2">ISPP and Pascal Scripting improvements</span>
<p>ISPP and Pascal Scripting have been improved with new and updated support functions, better documentation, and fixes for edge cases.</p>
<p>ISPP:</p>
<ul>
<li>Added new support function <tt>Format</tt>.</li>
<li>Support functions <tt>DeleteFileNow</tt> and <tt>CopyFile</tt> now return a non-zero value if successful.</li>
<li>Support function <tt>ReadReg</tt> can now read 64-bit integer (<tt>REG_QWORD</tt>) values.</li>
<li><i>Fixes:</i>
<ul>
<li>Support functions <tt>Min</tt> and <tt>Max</tt> now return the correct result when 3 values are used and the third value is the smallest (for <tt>Min</tt>) or largest (for <tt>Max</tt>) value.</li>
<li>Pascal-style string literals (on by default) no longer silently accept a missing closing quote. An unterminated string now raises a compiler error.</li>
<li>Calling a <tt>#sub</tt> procedure changes the <a href="https://jrsoftware.org/ishelp/index.php?topic=visibility">default visibility of identifiers</a> to <tt>private</tt>, which is correct, but this change persisted after the procedure returned. For example:
<pre><code class="innosetup"><ispp>#sub</ispp> MySub
<ispp>#emit</ispp> <str>'hello'</str>
<ispp>#endsub</ispp>
<ispp>#call</ispp> MySub()
<ispp>#define</ispp> MyVar = <num>42</num> <com>; was incorrectly created as private</com></code></pre></li>
<li>ISPP could incorrectly evaluate expressions following nested <tt>#elif</tt> and <tt>{#elif}</tt> directives in portions of script that were not selected. For example:
<pre><code class="innosetup"><ispp>#if</ispp> <num>0</num>
<ispp>#if</ispp> <num>0</num>
<ispp>#elif</ispp> SomeExpression <com>; was incorrectly evaluated</com>
<ispp>#endif</ispp>
<ispp>#endif</ispp></code></pre></li>
</ul>
</li>
<li>Previously undocumented support functions <tt>IsDirSet</tt> and <tt>TypeOf2</tt> are now documented and recognized by the Compiler IDE.</li>
<li>Previously undocumented directive <tt>#env</tt> and its shorthand <tt>#%</tt> are now documented and recognized by the Compiler IDE. This directive replaces itself with the value of the specified environment variable. Example: <tt><code class="innosetup"><key>AppName</key>=<ispp>{#%</ispp>MyAppName<ispp>}</ispp></code></tt>.</li>
<li>Previously undocumented directive aliases <tt>#call</tt> (for <tt>#expr</tt>) and <tt>#echo</tt> (for <tt>#emit</tt>) are now documented and recognized by the Compiler IDE. All examples now use <tt>#call</tt> instead of <tt>#expr</tt>. Example: <tt><code class="innosetup"><ispp>#call</ispp> EmitLanguagesSection</code></tt>.</li>
<li>Previously undocumented directive shorthands <tt>#?</tt> (for <tt>#if</tt>), <tt>#^</tt> (for <tt>#else</tt>), and <tt>#.</tt> (for <tt>#endif</tt>) are now documented and recognized by the Compiler IDE.</li>
<li>Previously undocumented <tt>func</tt> and <tt>array</tt> parameter types and the <tt>@</tt> operator are now documented by the <a href="https://jrsoftware.org/ishelp/index.php?topic=macros">User Defined Functions</a> help topic. Implementation fixes were also made. Example:
<pre><code class="innosetup"><ispp>#define</ispp> Apply(<ispp>func</ispp> Callback, <ispp>str</ispp> Value) Callback(Value)
<ispp>#define</ispp> Decorate(<ispp>str</ispp> S) <str>"("</str> + S + <str>")"</str>
<ispp>#emit</ispp> Apply(@Decorate, <str>"hello"</str>) <com>; emits "(hello)"</com></code></pre>
</li>
<li>Other documentation improvements.</li>
</ul>
<p>Pascal Scripting:</p>
<ul>
<li>Previously undocumented support functions <tt>Abs</tt>, <tt>Low</tt>, <tt>High</tt>, <tt>SizeOf</tt>, <tt>Assigned</tt>, <tt>Inc</tt>, <tt>Dec</tt>, <tt>Succ</tt>, <tt>Pred</tt>, <tt>Include</tt>, <tt>Exclude</tt>, and <tt>RaiseLastException</tt> are now all documented and recognized by the Compiler IDE.</li>
<li>Support functions <tt>TaskDialogMsgBox</tt> and <tt>SuppressibleTaskDialogMsgBox</tt> now wrap long instruction text onto multiple lines even when a custom style is active.</li>
<li>Support function <tt>AddPeriod</tt> no longer appends a <tt>.</tt> on strings ending with a question mark (<tt>?</tt>), ideographic full stop (<tt>。</tt>), or various other sentence-terminating characters (see documentation for the complete list). It also no longer appends a <tt>.</tt> on strings ending with a Thai or Lao character, because these do not end sentences with a full stop. On strings ending with any other non-control character, a <tt>.</tt> will be appended. Previously, a <tt>.</tt> was not appended on strings ending with spaces or certain symbols like quotation marks and parentheses (specifically, characters ≤ <tt>U+002E</tt>). This change also affects the error messages which Setup and the compiler themselves format using <tt>AddPeriod</tt>.</li>
<li><i>Fixes:</i> Support function <tt>CreateCallback</tt> has been improved for some edge cases:
<ul>
<li>In 32-bit installers, a by-value 3-byte record, set, or static array parameter now receives the correct value.</li>
<li>In 32-bit installers, an <tt>Int64</tt> or <tt>UInt64</tt> result is now returned correctly.</li>
<li>In 64-bit installers, a by-value record, set, or static array parameter of 8 bytes or smaller, or an <tt>Extended</tt> or <tt>Currency</tt> parameter in one of the first three positions, now receives the correct value.</li>
<li>In 64-bit installers, a result which isn't returned via a register, such as a record larger than 8 bytes, is now supported.<br/>
In 32-bit installers such results are still not supported.</li>
<li>In both 32-bit and 64-bit installers, a <tt>Currency</tt> result is now returned correctly.</li>
<li>A by-value record result is now returned correctly: of 1 or 2 bytes, or an unmanaged 4-byte one, in 32-bit installers, and of 1, 2, or 4 bytes, or an unmanaged 8-byte one, in 64-bit installers.</li>
</ul>
</li>
<li><i>Fixes:</i> Using DLL files has been improved for some edge cases:
<ul>
<li>In 32-bit installers, a by-value record larger than 4 bytes under the <tt>cdecl</tt> or <tt>stdcall</tt> convention, or a static array of 4 bytes or smaller under any convention, is now passed correctly.</li>
<li>In 32-bit installers, a by-value set result of 3 bytes no longer does an out-of-bounds write of 1 byte.</li>
<li>In 32-bit installers, calling a DLL function that returns a set or static array under the <tt>pascal</tt>, <tt>cdecl</tt>, or <tt>stdcall</tt> convention no longer fails.</li>
<li>In 64-bit installers, a by-value record, set, or static array parameter of 8 bytes or smaller is now passed correctly.</li>
<li>A by-value record result is now received correctly: of 3 bytes, or a managed 4-byte one, in 32-bit installers, and of 3, 5, 6, or 7 bytes, or a managed 8-byte one, in 64-bit installers.</li>
<li>A by-value static array result is now received correctly: of 1 or 2 bytes, or an unmanaged 4-byte one, in 32-bit installers, and of 1, 2, or 4 bytes, or an unmanaged 8-byte one, in 64-bit installers.</li>
<li>Importing a DLL function using the <tt>setuponly</tt> or <tt>uninstallonly</tt> option no longer fails when the function name contains an <tt>@</tt> (such as the decorated name <tt>_MyFunc@8</tt>).</li>
</ul>
</li>
</ul>
<span class="head2">Other improvements</span>
<ul>
<li>The time stamps of files shown in Setup's log are now in UTC instead of local time, consistent with <tt>TimeStampsInUTC</tt> defaulting to <tt>yes</tt>.</li>
<li>Updated the Scintilla source code used by Inno Setup to the latest version.</li>
<li>Updated the official Japanese, Simplified Chinese, Traditional Chinese, and Armenian translations: certain error messages now end with the language's own period character (such as <tt>。</tt>) instead of a <tt>.</tt> appended automatically at run time. A similar improvement was done for Thai, which does not use a period character.</li>
<li><i>Fix:</i> A <tt>+</tt> in the username or password of a download URL is no longer decoded as a space.</li>
<li>Many other minor improvements and fixes.</li>
</ul>
</details>
<details>
<summary>Inno Setup 7.0</summary>
<p><a name="7.0.2"></a><span class="ver">7.0.2 </span><span class="date">(2026-07-13)</span></p>
<ul>
<li>Added new <a href="https://jrsoftware.org/ishelp/index.php?topic=securitymeasures">Security Measures</a> help topic, which also includes a <a href="https://jrsoftware.org/ishelp/index.php?topic=securitymeasures&anchor=supplychain">Supply-chain security</a> section and links to our <a href="https://jrsoftware.org/isdl-verify.php">Verifying Inno Setup Downloads</a> page.<br/>
The security measures, the supply-chain security, and the download verification are not new, but they are now documented and linked in one place.</li>
<li>Compilation will now fail with an error if an <tt>.iss</tt>/<tt>.isl</tt> file contains a byte value or sequence that is not valid in the file's code page (character set). Previously, invalid bytes were interpreted as <tt>U+FFFD</tt> characters (the Unicode "replacement character").</li>
<li>Pascal Scripting: Improved documentation of support functions <a href="https://jrsoftware.org/ishelp/index.php?topic=isxfunc_registerserver">RegisterServer</a>, <a href="https://jrsoftware.org/ishelp/index.php?topic=isxfunc_registertypelibrary">RegisterTypeLibrary</a>, <a href="https://jrsoftware.org/ishelp/index.php?topic=isxfunc_incrementsharedcount">IncrementSharedCount</a> and <a href="https://jrsoftware.org/ishelp/index.php?topic=isxfunc_applypathredirrules">ApplyPathRedirRules</a> with updated explanations and examples.</li>
<li><i>Fixes:</i>
<ul>
<li>ISCC: Reading the script from standard input by specifying <tt>-</tt> as the script name is now documented again in the help file. Such a script is now assumed to be UTF-8 encoded.</li>
<li>When a custom style is active, the <i>Do this for the next conflicts</i> checkbox in the <i>File exists, confirm overwrite</i> and <i>Keep newer file?</i> task dialogs could start checked instead of unchecked (broken since custom styles were introduced in 6.6.0).</li>
<li>In previous 7.0 releases, when a 64-bit installer performed a 32-bit DLL registration or shared file reference count operation on a file under <tt>{sys}</tt>, a <tt>SysWOW64</tt> path was erroneously used instead of a <tt>System32</tt> path.</li>
<li>Setup no longer clears the read-only attribute of files and directories matching an <tt>[InstallDelete]</tt> entry's wildcard during its initial checks, before installation has started (broken since 5.5.0).</li>
<li>In Japanese, Korean, and Chinese, Setup no longer shows the accelerator key as literal text, such as "(&R)", in a few places.</li>
<li>Extracting a <tt>.cab</tt> archive no longer always fails with an error (broken since its introduction in 6.5.0).</li>
<li>Pascal Scripting: Selected <tt>TNewCheckListBox</tt> items with a custom <tt>ItemFontStyle</tt> or <tt>SubItemFontStyle</tt> no longer become unreadable after the list loses focus (broken since its introduction in 6.2.0). Thanks to Sergii Leonov for contributing this fix.</li>
</ul>
</li>
<li>Updated the 7-Zip and LZMA SDK source code used by Inno Setup to the latest versions.</li>
<li>Added official Lithuanian, Simplified Chinese and Traditional Chinese translations.</li>
<li>Improvements and corrections to all other official translations.</li>
</ul>
<p><a name="7.0.1"></a><span class="ver">7.0.1-beta </span><span class="date">(2026-05-26)</span></p>
<ul>
<li>Improved the Wine RichEdit workaround added in 7.0.0 to prevent a startup delay when very large texts are used in combination with a dark custom wizard style.</li>
<li><i>Fix:</i> Example script <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/PowerShell.iss">PowerShell.iss</a></tt> now uses an absolute path to load <tt>powershell.exe</tt>, for security reasons. If you used the demonstrated technique in your own scripts, <b>you should make the same changes</b>.</li>
<li>ISPP:
<ul>
<li><i>Fix:</i> A user defined function which has no parameters compiles again (broken in 7.0.0). Example: <tt><code class="innosetup"><ispp>#define</ispp> MyAppName() <str>"My Program"</str></code></tt>.</li>
<li>Added new predefined variable <tt>SysPath</tt>.</li>
</ul>
</li>
</ul>
<p><a name="7.0.0"></a><span class="ver">7.0.0-beta </span><span class="date">(2026-05-18)</span></p>
<p>We are proud to announce Inno Setup 7, which includes a 64-bit edition, as well as a 32-bit edition.</p>
<p>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.</p>
<p>Additionally, support for extended-length paths was added, removing <tt>MAX_PATH</tt> limitations.</p>
<p>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.</p>
<p>This work would <b>not</b> have been possible without the support provided through the purchase of commercial licenses. <b>Using Inno Setup commercially?</b> Please <a href="https://jrsoftware.org/isorder.php">purchase a license</a>.</p>
<p>Commercial licenses include two years of updates, both major and minor. If you purchased a commercial license recently, you are all set to use Inno Setup 7 as well.</p>
<span class="head2">64-bit Installers</span>
<p>Building 32-bit installers is the default in both editions. Set new <tt>[Setup]</tt> section directive <tt><a href="https://jrsoftware.org/ishelp/index.php?topic=setup_setuparchitecture">SetupArchitecture</a></tt> to <tt>x64</tt> to build a 64-bit x64 installer instead of a 32-bit x86 installer. This also changes the default values of <tt>ArchitecturesAllowed</tt> and <tt>ArchitecturesInstallIn64BitMode</tt> to <tt>x64compatible</tt>, making 64-bit installers default to <a href="https://jrsoftware.org/ishelp/index.php?topic=32vs64bitinstalls">64-bit install mode</a>.</p>
<p>Key benefits and differences:</p>
<ul>
<li>64-bit installers allow a maximum dictionary size for compression methods <tt>lzma</tt> and <tt>lzma2</tt> of 3.8 GB instead of 1 GB. Review the memory requirements listed in the <a href="https://jrsoftware.org/ishelp/index.php?topic=setup_compression">Compression help topic</a> before using large dictionary sizes.</li>
<li>64-bit installers have high-entropy ASLR enabled by default. This can help satisfy organizational policies or third-party requirements that mandate 64-bit executables.</li>
<li>64-bit installers fully support <a href="https://jrsoftware.org/ishelp/index.php?topic=32vs64bitinstalls">32-bit install mode</a>, and vice versa. To use a 64-bit installer while remaining in 32-bit install mode (for example, because you have been deploying 64-bit applications in 32-bit mode inadvertently), set <tt>ArchitecturesInstallIn64BitMode</tt> to a blank value to override the new default.</li>
<li>Existing installations made by 32-bit installers can be updated by 64-bit installers without issue, and vice versa.</li>
<li>64-bit Pascal Scripting notes:
<ul>
<li>In 32-bit installers, type <tt>Extended</tt> is 10 bytes, while in 64-bit installers it is 8 bytes and just an alias for type <tt>Double</tt>.</li>
<li>In 32-bit installers, types <tt>NativeInt</tt> and <tt>NativeUInt</tt> are 4 bytes, while in 64-bit installers they are 8 bytes. The same is true for all types derived from them, such as <tt>HWND</tt>.<br/>
Example script <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeDll.iss">CodeDll.iss</a></tt> demonstrates how to support both 32-bit and 64-bit installers from a single script.<br/>
Please note: Even though types like <tt>HWND</tt> are 8 bytes (64-bit) in 64-bit processes, <a href="https://learn.microsoft.com/en-us/windows/win32/winprog64/interprocess-communication">64-bit Windows uses 32-bit handle values for interoperability</a>. When sharing a handle between 32-bit and 64-bit applications, only the lower 32 bits are significant, so it is safe to truncate from 64-bit to 32-bit or sign extend from 32-bit to 64-bit.</li>
<li>In both 32-bit and 64-bit installers, Pascal Script records are always "packed". When calling a Windows API or external DLL function that expects aligned records, you may need to add manual padding fields. Even if this was not needed in a 32-bit installer, it may be needed in a 64-bit installer because alignment rules and field sizes differ.</li>
<li>You cannot load 32-bit DLLs in 64-bit installers because Windows does not allow 64-bit processes to load 32-bit DLLs (and vice versa). However, you can always launch both 32-bit and 64-bit EXEs using the <tt>Exec</tt> function or the <tt>[Run]</tt> section.</li>
<li>In 32-bit installers, <tt>CreateCallback</tt> does not support callback parameters passed by value when their type is larger than 4 bytes, such as <tt>Int64</tt>, <tt>UInt64</tt>, <tt>Double</tt>, <tt>Extended</tt>, and <tt>Currency</tt>. In 64-bit installers, larger by-value parameter types are supported.</li>
</ul>
</li>
<li>64-bit type libraries (<tt>.tlb</tt>) can now only be (un)registered by 64-bit installers, and 32-bit type libraries only by 32-bit installers.<br/>
Support for (un)registering 64-bit type libraries from a 32-bit installer has been dropped.</li>
<li><tt>{sysnative}</tt> is not accessible to 64-bit installers or any other 64-bit applications, so use its value only to, for example, pass it to a 32-bit application.</li>
<li>In our tests on 'Windows Server 2016 Datacenter Server Core' and 'Windows Server 2025 Datacenter: Azure Edition Core', with all WOW64 features disabled and removed using <tt>Dism.exe</tt>, 64-bit installers still function correctly, even when run in 32-bit install mode.</li>
</ul>
<p>Related changes made in both editions:</p>
<ul>
<li>Added new <a href="https://jrsoftware.org/ishelp/index.php?topic=pathredir">System Path Redirection</a> help topic.</li>
<li>Added new <a href="https://jrsoftware.org/ishelp/index.php?topic=entrybitness">Entry Bitness</a> help topic.</li>
<li>Pascal Scripting:
<ul>
<li>Removed support function <tt>EnableFsRedirection</tt>. Use new support function <tt>ApplyPathRedirRulesForCurrentProcess</tt> instead, or a 64-bit installer. 32-bit installers can also use <tt>{sysnative}</tt> instead.<br/>
Use new support functions <tt>ExecWithNativeSysDir</tt>, <tt>ExecAndLogOutputWithNativeSysDir</tt>, or <tt>ExecAndCaptureOutputWithNativeSysDir</tt> to launch an executable located in the 64-bit System directory from a 32-bit installer.</li>
<li>Removed parameter <tt>DisableFsRedir</tt> from support function <tt>RegisterExtraCloseApplicationsResource</tt>. Use <tt>ApplyPathRedirRulesForCurrentProcess</tt> instead to register a 64-bit file from a 32-bit installer, or vice versa.</li>
<li>Added support functions <tt>ApplyPathRedirRules</tt> and <tt>IsCurrentProcess64Bit</tt>.</li>
<li>Added types <tt>UInt64</tt>, <tt>NativeInt</tt>, <tt>NativeUInt</tt>, <tt>LONG</tt>, <tt>ULONG</tt>, <tt>LONG_PTR</tt>, <tt>ULONG_PTR</tt>, <tt>THandle</tt>, <tt>HANDLE</tt>, <tt>COLORREF</tt>, <tt>HWND</tt>, <tt>HDC</tt>, <tt>HBITMAP</tt>, <tt>HFONT</tt>, <tt>HKEY</tt>, <tt>HINSTANCE</tt>, <tt>HMODULE</tt>, <tt>LRESULT</tt>, <tt>WPARAM</tt>, <tt>LPARAM</tt>, <tt>SIZE_T</tt>, and <tt>SSIZE_T</tt>.<br/>
These new types complement the following similar types which were already available: <tt>Int64</tt>, <tt>DWORD_PTR</tt>, <tt>INT_PTR</tt>, and <tt>UINT_PTR</tt>.<br/>
<i>If your script already included a custom definition of one of the new types, you should simply remove this definition.</i></li>
</ul>
</li>
</ul>
<span class="head2">64-bit Compiler IDE and ISCC</span>
<p>Install the 64-bit edition of Inno Setup 7 to run 64-bit versions of the Compiler IDE and ISCC. Both editions read the same scripts and defaults, and either can build 32-bit or 64-bit installers.</p>
<p>To check which edition you installed, click the "Inno Setup Compiler" shortcut in the Start Menu. The 32-bit edition displays "32-bit" in the title bar, while the 64-bit edition does not.</p>
<p>Using the 64-bit edition is recommended.</p>
<p>Key benefits and differences:</p>
<ul>
<li>Either edition can generate installers of either architecture: 32-bit compilers can build 64-bit installers, and vice versa.</li>
<li>Both editions can be installed side by side and include the same examples and help files.</li>
<li>64-bit compilers generally achieve faster LZMA compression while maintaining full compatibility with existing scripts.<br/>
On Arm64-based Windows 11, they use an ARM64EC binary (<tt>islzma-Arm64EC.dll</tt>) for native performance.</li>
<li>The <tt>[Setup]</tt> directive <tt>LZMAUseSeparateProcess</tt> is ignored by 64-bit compilers, because 64-bit processes can directly allocate more memory, eliminating the need for an out-of-process compressor.</li>
</ul>
<span class="head2">Extended-length Path Support</span>
<p>Setup and Uninstall now work with extended-length paths (also known as super paths) throughout, removing <tt>MAX_PATH</tt> limitations.</p>
<p>This applies to both 32-bit and 64-bit installers.</p>
<p>Related changes:</p>
<ul>
<li>Logged paths are now extended-length paths. The end user is still shown normal paths.<br/>
A normal path looks like this: <tt>c:\Program Files\My Program</tt><br/>
The extended-length version of the same path looks like this: <tt>\\?\c:\Program Files\My Program</tt></li>
<li>Constants like <tt>{app}</tt>, <tt>{autopf}</tt>, and <tt>{tmp}</tt> still return normal paths.</li>
<li>Pascal Scripting:
<ul>
<li>Added support functions <tt>PathConvertNormalToSuper</tt> and <tt>PathConvertSuperToNormal</tt>.</li>
<li>Support function <tt>IsWildcard</tt> now only checks the last path component, avoiding false positives on extended-length path prefixes.</li>
</ul>
</li>
</ul>
<span class="head2">Security improvements</span>
<ul>
<li>As a proactive security measure, the compiler no longer allows <tt>.isl</tt> message files specified in the <tt>[Languages]</tt> section to contain compiler directives such as <tt>#include</tt>. Compilation will abort with an error if any <tt>#</tt> lines are encountered. Also, ISPP is not enabled and cannot be enabled (<tt>#preproc ispp</tt> isn't allowed), so any inline ISPP directives (<tt>{#...}</tt>) are not processed.</li>
</ul>
<span class="head2">Other changes</span>
<p>Additionally, the following changes have been made in both editions:</p>
<ul>
<li>Compiler IDE:
<ul>
<li>The Compiler IDE has been renamed from <tt>Compil32.exe</tt> to <tt>ISIDE.exe</tt>.</li>
<li>Added autocompletion support for ISPP support functions and predefined variables in ISPP expression directives such as <tt>#define</tt>, <tt>#if</tt>, <tt>#emit</tt>, and <tt>#expr</tt>.<br/>
Parameter hints and mouseover tooltips showing the prototype of ISPP support functions are now also available on such lines for quick reference to the function's parameter names, types, and order.</li>
<li>Added autocompletion support for ISPP <tt>#pragma</tt> sub-directives such as <tt>warning</tt>, <tt>message</tt>, and <tt>option</tt>.</li>
<li>Fixed autocompletion for section names, constants, and ISPP directives breaking after the mouse hovered over the <tt>[Code]</tt> section.</li>
<li>Parameter hints are now also updated when using the left and right arrow keys, and after Backspace or Delete.</li>
<li><i>Find in Files</i>, <i>Replace All</i>, and <i>Select All Find Matches</i> could enter an infinite loop, or miss a valid match at the end of the text, when using a regular expression that matches zero-length text (for example <tt>^</tt> or <tt>\b</tt>).</li>
</ul>
</li>
<li><tt>[Setup]</tt> section:
<ul>
<li>A new custom style is now available built-in and directly supported by the <tt>WizardStyle</tt> directive: <tt>stellar</tt>. <tt>stellar</tt> is an alternative light-only style with white foreground text, ideally suited to be combined with a <a href="https://jrsoftware.org/ishelp/index.php?topic=setup_wizardbackcolor">custom darker background color</a> or <a href="https://jrsoftware.org/ishelp/index.php?topic=setup_wizardbackimagefile">image</a>. For example:
<pre><code class="innosetup"><key>WizardStyle</key>=modern stellar excludelightcontrols</code></pre>
<a href="https://jrsoftware.org/images/is-welcome-stellar-org-150.png">Example screenshot of Setup using the Stellar style, at 150% DPI</a>.<br/>
<a href="https://jrsoftware.org/images/is-welcome-stellar-backimage-org-150.png">Example screenshot of Setup using the Stellar style, a custom background image, and the <tt>excludelightcontrols</tt> modifier, at 150% DPI</a>.<br/>
</li>
<li>Directive <tt>AppVerName</tt> now defaults to <tt><i>AppName</i> <i>AppVersion</i></tt> (just a space separating the values) rather than <tt><i>AppName</i> version <i>AppVersion</i></tt> (localized).<br/>
If you prefer to keep the word "version" (localized), use the <tt>NameAndVersion</tt> custom message: <tt>AppVerName={cm:NameAndVersion,My Program,1.5}</tt></li>
<li>Directive <tt>ArchiveExtraction</tt> can now also be set to <tt>auto</tt>, the new default, which automatically selects the appropriate method based on entries in the <tt>[Files]</tt> section.<br/>
If it selects <tt>basic</tt> because no entry uses the <tt>extractarchive</tt> flag, but you still use support function <tt>ExtractArchive</tt> or <tt>CreateExtractionPage</tt>, you must still manually set the correct method.</li>
<li>Directive <tt>TimeStampsInUTC</tt> now defaults to <tt>yes</tt>.</li>
</ul>
</li>
<li>Pascal Scripting:
<ul>
<li>Added new optional <tt>OnLog</tt> parameter to the <tt>[Run]</tt> section. When combined with the <tt>logoutput</tt> flag, it specifies the name of a procedure that is to be called for each line of the program's output instead of directly including it in the log file.<br/>
See updated <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/PowerShell.iss">PowerShell.iss</a></tt> example script.</li>
<li>Added support functions <tt>StrToUInt64</tt>, <tt>StrToUInt64Def</tt>, and <tt>UIntToStr</tt>.</li>
<li>Support functions <tt>Chr</tt> and <tt>StringOfChar</tt> now correctly accept ordinal values greater than 255 and wide chars.</li>
<li>Support function <tt>FloatToStr</tt> no longer outputs unnecessary trailing zeros.</li>
<li>Using <tt>Exit</tt> within a <tt>try..finally</tt> block now works correctly when the <tt>finally</tt> block contains function calls.</li>
<li>Multiple statements in the <tt>else</tt> block of a <tt>case</tt> statement now no longer require using <tt>begin</tt>/<tt>end</tt>.</li>
<li>It's now possible to specify the <tt>safecall</tt> calling convention in interfaces, simplifying method declarations and eliminating the need to call <tt>OleCheck</tt> manually. See updated <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeAutomation2.iss">CodeAutomation2.iss</a></tt> example script.</li>
<li>To suppress compiler warnings for a line in a <tt>[Code]</tt> section, you can now include a <tt>{$NOWARN}</tt> marker anywhere on that line. It is recognized even inside comments.</li>
<li>Improved the <tt>as</tt> operator to perform the same runtime type check as the <tt>is</tt> operator.</li>
<li>Fixed a runtime type mismatch when assigning between open and dynamic arrays.</li>
<li>Fixed support functions <tt>InitializeBitmapButtonFromIcon</tt> (broken since its introduction) and <tt>InitializeBitmapImageFromIcon</tt> (broken since 6.5.0).</li>
</ul>
</li>
<li>ISPP:
<ul>
<li>Renamed (previously undocumented) support functions <tt>GetFileCompany</tt>, <tt>GetFileDescription</tt>, <tt>GetFileCopyright</tt>, <tt>GetFileOriginalFilename</tt>, and <tt>GetFileProductVersion</tt> to <tt>GetFileCompanyString</tt>, <tt>GetFileDescriptionString</tt>, <tt>GetFileCopyrightString</tt>, <tt>GetFileOriginalFilenameString</tt>, and <tt>GetFileProductVersionString</tt> respectively, making them consistent with the existing (also previously undocumented) <tt>GetFileVersionString</tt>. The old names still work.</li>
<li>Documented the difference between <tt>GetFileVersionString</tt> and <tt>GetVersionNumbersString</tt>.</li>
<li>Fixed handling of relative filenames by support functions <tt>ReadIni</tt>, <tt>WriteIni</tt>, and <tt>Is64BitPEImage</tt> to be the same as other file-related support functions.</li>
</ul>
</li>
<li>Split the help text shown by the <tt>/HELP</tt> command-line parameter across two message boxes for easier reading.</li>
<li>Added workaround for limitations in Wine's RichEdit implementation that caused text displayed by the <tt>[Setup]</tt> section directives <tt>LicenseFile</tt>, <tt>InfoBeforeFile</tt>, and <tt>InfoAfterFile</tt> to show with unchanged foreground colors when a custom wizard style is active.</li>
<li>Updated ISCC to no longer create the Inno Setup registry key when only reading from it.</li>
<li>Updated the 7-Zip, LZMA SDK, Scintilla, and zlib source code used by Inno Setup to the latest versions.</li>
<li>The <tt>full</tt> archive extraction method now supports <tt>.zst</tt> (Zstandard) archives.</li>
<li>The Inno Setup source code now contains SPDX SBOM metadata.</li>
<li><i>Fix:</i> <tt>[Files]</tt> section entries with the <tt>extractarchive</tt> flag could fail to extract any files from an archive if the first entry in the archive didn't match.<br/>
For example, if the archive contained a file in a subdirectory as its first entry (for example, <tt>subdir\file1.txt</tt> followed by <tt>file2.txt</tt>) and <tt>recursesubdirs</tt> was not used, no files would be extracted at all, not even <tt>file2.txt</tt>.</li>
<li>Many other minor improvements and fixes.</li>
</ul>
</details>
<details>
<summary>Inno Setup 6.7</summary>
<p><a name="6.7.3"></a><span class="ver">6.7.3 </span><span class="date">(2026-05-26)</span></p>
<ul>
<li>Changes backported from <a href="https://jrsoftware.org/isdl.php#v7">Inno Setup 7</a>:
<ul>
<li>Improved the Wine RichEdit workaround added in 6.7.2 to prevent a startup delay when very large texts are used in combination with a dark custom wizard style.</li>
<li><i>Fix:</i> Example script <i><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/tags/is-6_7_3/Examples/PowerShell.iss">PowerShell.iss</a></i> now uses an absolute path to load <tt>powershell.exe</tt>, for security reasons. If you used the demonstrated technique in your own scripts, <b>you should make the same changes</b>.</li>
<li>ISPP:
<ul>
<li><i>Fix:</i> A user defined function which has no parameters compiles again (broken in 6.7.2). Example: <tt>#define MyAppName() "My Program"</tt>.</li>
<li>Added new predefined variable <tt>SysPath</tt>.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><a name="6.7.2"></a><span class="ver">6.7.2 </span><span class="date">(2026-05-18)</span></p>
<ul>
<li>Fixes backported from <a href="https://jrsoftware.org/isdl.php#v7">Inno Setup 7</a>:
<ul>
<li>Compiler IDE: Fixed autocompletion for section names, constants, and ISPP directives breaking after the mouse hovered over the <tt>[Code]</tt> section.</li>
<li>Compiler IDE: <i>Find in Files</i>, <i>Replace All</i>, and <i>Select All Find Matches</i> could enter an infinite loop, or miss a valid match at the end of the text, when using a regular expression that matches zero-length text (for example <tt>^</tt> or <tt>\b</tt>).</li>
<li>Updated ISCC to no longer create the Inno Setup registry key when only reading from it.</li>
<li><tt>[Files]</tt> section entries with the <tt>extractarchive</tt> flag could fail to extract any files from an archive if the first entry in the archive didn't match.<br/>
For example, if the archive contained a file in a subdirectory as its first entry (for example, <tt>subdir\file1.txt</tt> followed by <tt>file2.txt</tt>) and <tt>recursesubdirs</tt> was not used, no files would be extracted at all, not even <tt>file2.txt</tt>.</li>
<li>ISPP: Fixed handling of relative filenames by support functions <tt>ReadIni</tt>, <tt>WriteIni</tt>, and <tt>Is64BitPEImage</tt> to be the same as other file-related support functions.</li>
<li>Pascal Scripting: Fixed support functions <tt>InitializeBitmapButtonFromIcon</tt> (broken since its introduction) and <tt>InitializeBitmapImageFromIcon</tt> (broken since 6.5.0).</li>
<li>Setup: Added workaround for limitations in Wine's RichEdit implementation that caused text displayed by the <tt>[Setup]</tt> section directives <tt>LicenseFile</tt>, <tt>InfoBeforeFile</tt>, and <tt>InfoAfterFile</tt> to show with unchanged foreground colors when a custom wizard style is active.</li>
<li>Other minor fixes.</li>
</ul>
</li>
<li>Compiler IDE: Added a banner that will appear starting July 2026, reminding you of the Inno Setup 7 release. <a href="https://jrsoftware.org/isdl.php#v7">Inno Setup 7</a> can be installed side-by-side with Inno Setup 6.</li>
</ul>
<p><a name="6.7.1"></a><span class="ver">6.7.1 </span><span class="date">(2026-02-17)</span></p>
<span class="head2">General improvements</span>
<ul>
<li>Compiler:
<ul>
<li>When setting <tt>WizardBackImageFile</tt>, the compiler now also checks whether a custom style was specified via <tt>WizardStyleFile</tt>.</li>
<li>The compiler's retry mechanisms now also retry the initial copy of the E32 file to the output EXE.</li>
</ul>
</li>
<li>Compiler IDE:
<ul>
<li>Improved section folding to allow folding of (entire) functions and procedures in the <tt>[Code]</tt> section.</li>
<li>Added new <i>Smart Home key</i> option, enabled by default.</li>
<li>Added a banner that will appear in April 2026, inviting you to share your ideas and vote on others on an ideas board, open that month only.</li>
</ul>
</li>
<li>Setup:
<ul>
<li>Improved enumeration of the Windows <tt>PendingFileRenameOperations</tt> registry value.<br/>
If you use <tt>restartreplace</tt> flags in your <tt>[Files]</tt> section, updating is recommended.</li>
<li>Edit controls that take paths to directories now exclude names of files from their AutoComplete lists.</li>
<li>Added workaround for slower folder browsing on Windows 11 25H2.</li>
</ul>
</li>
</ul>
<span class="head2">Other changes</span>
<ul>
<li>Pascal Scripting:
<ul>
<li>Added new <tt>Alignment</tt> property to support class <tt>TNewStaticText</tt>. See updated <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeClasses.iss">CodeClasses.iss</a></tt> example script for an example.</li>
<li>Added new <tt>AutoCompleteFiles</tt> property to support class <tt>TNewPathEdit</tt>. If set to <tt>False</tt> (the default value), only directory names are included in the AutoComplete list. If set to <tt>True</tt>, file names are included as well.</li>
</ul>
</li>
<li>ISPP:
<ul>
<li>The date and time separators of support functions <tt>GetDateTimeString</tt> and <tt>GetFileDateTimeString</tt> are now truly optional, rather than requiring empty strings.</li>
<li>Added new support function <tt>EmitLanguagesSection</tt>, to generate a full <tt>[Languages]</tt> section for all available official languages, including English. Example: <tt>#expr EmitLanguagesSection</tt>.<br/>
When possible, the Compiler IDE's New Script Wizard will use this function.</li>
</ul>
</li>
<li>Added official Thai translation.</li>
<li>Other minor improvements.</li>
</ul>
<p><a name="6.7.0"></a><span class="ver">6.7.0 </span><span class="date">(2026-01-06)</span></p>
<span class="head2">Custom wizard background colors and images</span>
<p>Setup now allows you to specify a custom background color and optionally also a background image. This supports blending the color and image with each other, and optionally supports using a separate background color and image if dark mode is active.</p>
<p>Custom background colors are also supported by Uninstall.</p>
<p>These changes are backward compatible: if you do not set any of the new directives, then your installers and uninstallers will look the same as before.</p>
<ul>
<li>Added new <tt>WizardStyle</tt> modifier <tt>excludelightcontrols</tt>. Disables custom styling of all controls (including buttons) when a light style is active, except when styling is required to achieve transparency.</li>
<li>Added new <tt>WizardStyle</tt> modifier <tt>hidebevels</tt>. Hides all bevels (horizontal lines) across Setup and Uninstall, except those in native system dialogs.</li>
<li>Added new <tt>[Setup]</tt> section directives <tt>WizardBackColor</tt> and <tt>WizardBackColorDynamicDark</tt> to specify custom background colors to use for wizard pages and all other windows such as the <i>Select Language</i> dialog, in both Setup and Uninstall.<br/>
If you set this directive but a custom style is not specified by <tt>WizardStyle</tt>, it will automatically activate custom style <tt>windows11</tt> with modifier <tt>excludelightcontrols</tt>.</li>
<li>Added new <tt>[Setup]</tt> section directives <tt>WizardBackImageFile</tt> and <tt>WizardBackImageFileDynamicDark</tt> to specify custom images to display as the background of wizard pages in Setup, but not in Uninstall.<br/>
Supports specifying multiple files for high-quality results on all DPI settings.<br/>
If you set this directive but a custom style is not specified by <tt>WizardStyle</tt>, it will automatically activate custom style <tt>windows11</tt> with modifiers <tt>excludelightcontrols</tt> and <tt>hidebevels</tt>.<br/>
Note that in light mode, the <tt>windows11</tt> custom style uses an off-white background color. To revert this, set <tt>WizardBackColor</tt> to <tt>white</tt>.<br/>
<a href="https://jrsoftware.org/images/is-welcome-dark-backimage-org-150.png">Example screenshot of Setup using a background image in dark mode, at 150% DPI</a>.<br/>
<a href="https://jrsoftware.org/images/is-welcome-backimage-org-150.png">Example screenshot of Setup using a background image in light mode, at 150% DPI</a>.<br/>
<a href="https://jrsoftware.org/images/is-taskdialog-backcolor-org-125.png">Example screenshot of a task dialog using a background color, at 125% DPI</a>.
</li>
<li><tt>[Setup]</tt> section directives <tt>WizardImageFile</tt> and <tt>WizardSmallImageFile</tt> can now be set to blank values when you want the background image (or color) to stand on its own. Doing so does not change the layout of the wizard.<br/>
Alternatively, set <tt>WizardImageOpacity</tt> to blend these images with the background image (or color). Can be used with the built-in wizard images as well.</li>
<li>Added new <tt>[Setup]</tt> section directive <tt>WizardBackImageOpacity</tt> to specify the opacity (non-transparency) of the background image.<br/>
This is useful if you want to use an identical regular and <tt>DynamicDark</tt> background image.</li>
<li>Examples:
<pre><code class="innosetup"><com>; Use separate background images for light and dark appearances</com>
<key>WizardBackImageFile</key>=MyBackImage.png
<key>WizardBackImageFileDynamicDark</key>=MyBackImage_Dark.png
<com>; Hide the large and small wizard images</com>
<key>WizardImageFile</key>=
<key>WizardSmallImageFile</key>=
<com>; Use the same background image for both light and dark appearances</com>
<key>WizardBackImageFile</key>=MyBackImage.png
<key>WizardBackImageFileDynamicDark</key>=MyBackImage.png
<com>; Apply transparency to the background image so it works well in</com>
<com>; both light and dark appearances</com>
<key>WizardBackImageOpacity</key>=150
<com>; Keep large and small wizard images, applying transparency so they</com>
<com>; blend with the background image</com>
<key>WizardImageOpacity</key>=150
<com>; Use a background image in the wizard, and also use custom</com>
<com>; background colors on other windows, and in Uninstall</com>
<key>WizardBackImageFile</key>=MyBackImage.png
<key>WizardBackImageFileDynamicDark</key>=MyBackImage.png
<key>WizardBackColor</key>=#ffc0cb
<key>WizardBackColorDynamicDark</key>=#570c22
<com>; On wizard pages blend the background image and color together</com>
<key>WizardBackImageOpacity</key>=150</code></pre></li>
<li>Pascal Scripting: Added new support function <tt>WizardSetBackImage</tt> to set, update, or remove the background image at runtime. It can be used not only in Setup, but also in Uninstall.<br/>
See the <a href="https://jrsoftware.org/ishelp/index.php?topic=isxfunc_wizardsetbackimage">new help topic</a> for an example, and see new function <tt>BackImageButtonOnClick</tt> in <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeClasses.iss">CodeClasses.iss</a></tt> for another example.</li>
</ul>
<span class="head2">Compiler IDE improvements</span>
<p>Autocomplete now cuts <tt>[Setup]</tt> section directive lookup time, and #include tabs are more manageable, even in large projects.</p>
<ul>
<li>Added autocomplete support in the <tt>[Setup]</tt> section for directive values with fixed options, such as all <tt>yes</tt>/<tt>no</tt> directives and others like <tt>WizardStyle</tt>.</li>
<li>The Compiler IDE now opens up to 50 #include files in tabs, instead of up to 20.</li>
<li>Added a new <i>Keep new #include files closed</i> option, disabled by default.<br/>
When enabled, newly discovered #include files during compilation remain closed until you explicitly reopen their tabs via, for example, the <i>View</i> menu.</li>
<li>Added new <i>Go to File</i> menu item to the <i>Edit</i> menu to go to a file (Ctrl+F12 or Ctrl+P).</li>
<li>When opening a file that is an #include file of the current main file using the <i>Open</i> menu item of the <i>File</i> menu, the IDE now offers to go to its tab instead of opening it as the new main file.</li>
<li>Ctrl+W now closes the current tab (in addition to Ctrl+F4), consistent with other modern editors. Previously, Ctrl+W was assigned to <i>Target Uninstall</i> in the <i>Run</i> menu, which is now reassigned to Alt+Q.</li>
</ul>
<span class="head2">Security improvements</span>
<p>Updating is recommended, even if you don't plan to use the other enhancements right away. We continually add extra checks to make your installers safer and more reliable. In this version:</p>
<ul>
<li><p>Setup and Uninstall now attempt to enable Windows' RedirectionGuard mitigation on their own processes by default. This mitigation, available on Windows 11 and Windows 10 22H2, blocks traversal of NTFS junctions and symbolic links created by unprivileged users (or any non-elevated processes), providing protection against path redirection attacks that could lead to privilege escalation.</p>
<p>For further details, refer to the <a href="https://jrsoftware.org/ishelp/index.php?topic=setup_redirectionguard">help topic</a> for the new <tt>[Setup]</tt> section directive <tt>RedirectionGuard</tt>, which controls whether RedirectionGuard should be enabled. New command-line parameters <tt>/NOREDIRECTIONGUARD</tt> and <tt>/REDIRECTIONGUARD</tt> are also supported, which override the <tt>RedirectionGuard</tt> setting.</p>
</li>
</ul>
<span class="head2">Other changes</span>
<ul>
<li>Added retry mechanisms to the compiler to make the compilation process more robust against temporary file access issues, such as when antivirus software or other processes temporarily lock output files.</li>
<li><i>Fix:</i> On Windows Server, when an installer attempted to restart the computer, an "unable to restart the computer" error message may have been seen. This was due to the restart being initiated from a non-elevated process, which Windows Server does not allow by default. The restart is now initiated from an elevated process, resolving the issue, provided that the installer requests elevation. If <tt>PrivilegesRequired</tt> is set to <tt>lowest</tt> instead of <tt>admin</tt>, then none of Setup's processes are elevated (unless the installer was started using "Run as administrator"), and the error message may still be seen.</li>
<li><tt>[Setup]</tt> section directives such as <tt>WizardImageBackColor</tt> and <tt>WizardBackColor</tt> now also accept color names like <tt>white</tt> and <tt>black</tt>, in addition to <tt>clWhite</tt>, <tt>clBlack</tt>, <tt>#ffffff</tt>, and <tt>#000000</tt>.</li>
<li><i>Fix:</i> File and directory controls in Setup should always use left-to-right reading order, even when a right-to-left language is active, but this has not been the case since version 6.5.2.</li>
<li>Pascal Scripting:
<ul>
<li><tt>[Setup]</tt> section directives <tt>UsePreviousAppDir</tt>, <tt>UsePreviousGroup</tt>, <tt>UsePreviousSetupType</tt>, <tt>UsePreviousTasks</tt>, and <tt>UsePreviousUserInfo</tt> may now be set to a boolean expression, which may contain calls to check functions. For example: <tt>UsePreviousAppDir=not PortableCheck</tt>.</li>
<li>Added support functions <tt>PathCombine</tt>, <tt>PathEndsWith</tt>, <tt>PathHasInvalidCharacters</tt>, <tt>PathIsRooted</tt>, <tt>PathNormalizeSlashes</tt>, <tt>PathSame</tt>, and <tt>PathStartsWith</tt> to make path handling easier.</li>
<li>Added support class <tt>TNewPathEdit</tt>, a <tt>TNewEdit</tt> descendant that always uses left-to-right reading order and provides filesystem autocompletion.<br/>
You should use <tt>TNewPathEdit</tt> instead of <tt>TNewEdit</tt> for file and directory controls, but using <tt>TInputFileWizardPage</tt> and <tt>TInputDirWizardPage</tt> instead is still recommended.
</li>
<li>Added support function <tt>RPos</tt>.</li>
</ul>
</li>
<li>ISPP:
<ul>
<li>Added support function <tt>Is64BitPEImage</tt>.</li>
<li><i>Fix:</i> Support function <tt>SameStr</tt> is now properly case-sensitive.</li>
<li><i>Fix:</i> Support function <tt>RPos</tt> now properly returns 0 for empty substrings.</li>
<li>Using support function <tt>ExtractFileDir</tt> no longer triggers a warning about <tt>RemoveBackslash</tt>.</li>
</ul>
</li>
<li>The various options for <tt>[Setup]</tt> section directive <tt>DisablePrecompiledFileVerifications</tt> have had their <tt>dll</tt>/<tt>e32</tt>/<tt>exe</tt> postfixes removed. Options <tt>setupldre32</tt> and <tt>setupldre64</tt> have been merged into a single <tt>setupldr</tt> option.</li>
<li><i>Experimental</i>: Added support for using a 64-bit version of the "Setup Loader" program by setting existing <tt>[Setup]</tt> section directive <tt>UseSetupLdr</tt> to <tt>x64</tt>.<br/>
Using <tt>x64</tt> does not mean that Setup itself will also be 64-bit: Setup itself is currently always built as a 32-bit x86 binary.<br/>
Using <tt>x64</tt> anyway has several benefits: your installer initially presents itself as a native 64-bit executable, and the 64-bit loader has high-entropy ASLR enabled. Additionally, it can help satisfy policy or third-party requirements that mandate 64-bit installers, even while the main Setup program is still 32-bit.<br/>
The downside is that your installer will no longer load on systems running x86 Windows.
</li>
<li>If Inno Setup is not already installed, the installer will again prompt you to choose the installation mode (all users or current user only) using a suppressible dialog. Since version 6.1.1, this choice was only available via the <tt>/ALLUSERS</tt> and <tt>/CURRENTUSER</tt> command-line parameters.</li>
<li>Other minor improvements.</li>
</ul>
</details>
<details>
<summary>Inno Setup 6.6</summary>
<p><a name="6.6.1"></a><span class="ver">6.6.1 </span><span class="date">(2025-11-20)</span></p>
<ul>
<li>Changes related to custom styles:
<ul>
<li>Previously, when displaying any RTF text with a custom style active (including the built-in custom dark style), all foreground colors were replaced by the style's foreground color. This has been improved to only replace default foreground colors, preserving any custom colors.</li>
<li>Added new <tt>[Setup]</tt> section directive <tt>WizardImageOpacity</tt> to specify the opacity of wizard images. This is useful if you want to use identical regular and <tt>DynamicDark</tt> wizard images. For example, you can set it to <tt>150</tt> to achieve partial transparency. Defaults to fully opaque (non-transparent).</li>
<li>The compiler now stores identical regular and <tt>DynamicDark</tt> wizard images only once.</li>
<li><i>Documentation fix:</i> The prototype of Pascal Scripting support function <tt>CreateCustomForm</tt> was changed in the previous version, but <a href="https://jrsoftware.org/ishelp/index.php?topic=isxfunc_createcustomform">its documentation</a> was not updated accordingly. This has now been corrected.</li>
</ul>
</li>
<li>Security improvement:
<ul>
<li>Added new <tt>[Files]</tt> section flag <tt>notimestamp</tt>, preventing the file from being stored with a timestamp. Use this flag to help make builds reproducible, even if you are unable to preserve timestamps on source files.</li>
</ul>
</li>
<li>Other minor improvements.</li>
</ul>
<p><a name="6.6.0"></a><span class="ver">6.6.0 </span><span class="date">(2025-11-11)</span></p>
<span class="head2">Dark mode and custom styles in Setup and Uninstall</span>
<p>Setup and Uninstall now both support dark mode, forced or automatic. Custom styles are also supported.</p>
<p>This new feature does <i>not</i> increase the size of Setup if not used and is fully backward compatible.</p>
<ul>
<li>Enhanced <tt>[Setup]</tt> section directive <tt>WizardStyle</tt> with new appearance modes:
<ul>
<li>Added appearance modes: <tt>light</tt> (default, forced light mode, same appearance as previous versions), <tt>dark</tt> (forced dark mode, new appearance), and <tt>dynamic</tt> (automatically follows Windows system settings).</li>
<li>For example, to use the modern look and automatically switch between light and dark appearance based on the user's Windows system settings:
<pre><code class="innosetup"><key>WizardStyle</key>=modern dynamic</code></pre>
</li>
<li>Dark mode automatically replaces icons, wizard images, and colors while maintaining a consistent user experience. It still allows a custom main icon, and custom images and colors. Includes support for styled task dialogs.<br/>
<a href="https://jrsoftware.org/images/is-welcome-dark-org-150.png">Example screenshot of Setup using the built-in dark style, at 150% DPI</a>.<br/>
<a href="https://jrsoftware.org/images/is-taskdialog-dark-org-125.png">Example screenshot of a task dialog using the built-in dark style, at 125% DPI</a>.<br/>
<a href="https://jrsoftware.org/images/is-taskdialog-dark-org-125-rtl.png">Includes full right-to-left support</a>.
</li>
<li>See the updated <tt><a href="https://jrsoftware.org/ishelp/index.php?topic=setup_wizardstyle">WizardStyle</a></tt> help topic for more information, special considerations, and example screenshots.</li>
</ul>
</li>
<li>Added four new <tt>DynamicDark</tt> directives to the <tt>[Setup]</tt> section, for specifying separate custom images and colors used specifically when dynamic mode switches to dark appearance:
<ul>
<li>For example, to specify two custom colors, one for light mode and one for dark mode:
<pre><code class="innosetup"><key>WizardStyle</key>=modern dynamic
<key>WizardImageBackColor</key>=white
<key>WizardImageBackColorDynamicDark</key>=#2b2b2b</code></pre>
Note: Forced dark mode (<tt>dark</tt>) does not use the <tt>DynamicDark</tt> settings; it uses the standard settings. Example:
<pre><code class="innosetup"><key>WizardStyle</key>=modern dark
<key>WizardImageBackColor</key>=#2b2b2b</code></pre>
</li>
</ul>
</li>
<li>The default style can be customized by specifying a VCL Styles file using the new <tt>WizardStyleFile</tt> directive and a fifth <tt>DynamicDark</tt> directive:
<ul>
<li>For example, to specify two custom styles, one for light mode and one for dark mode:
<pre><code class="innosetup"><key>WizardStyle</key>=modern dynamic
<key>WizardStyleFile</key>=MyStyleLight.vsf
<key>WizardStyleFileDynamicDark</key>=MyStyleDark.vsf</code></pre>
<a href="https://jrsoftware.org/images/is-welcome-polarlight-org-150.png">Example screenshot of Setup using the Polar Light style, at 150% DPI</a>.<br/>
<a href="https://jrsoftware.org/images/is-welcome-polardark-org-150.png">Example screenshot of Setup using the Polar Dark style, at 150% DPI</a>.<br/>
<a href="https://jrsoftware.org/images/is-taskdialog-zircon-org-125.png">Example screenshot of a task dialog using the Zircon style, at 125% DPI</a>.
</li>
<li>When a custom style (including the built-in custom dark style) is active, all text labels, except for the label associated with the <tt>BeveledLabel</tt> message, are transparent rather than opaque.</li>
<li>The Polar style shown above is available built-in and directly supported by the <tt>WizardStyle</tt> directive. For example:
<pre><code class="innosetup"><key>WizardStyle</key>=modern dynamic polar</code></pre>
</li>
<li>Three more custom styles are available built-in and directly supported by the <tt>WizardStyle</tt> directive: <tt>slate</tt>, <tt>windows11</tt> and <tt>zircon</tt>. <tt>slate</tt> uses medium gray for both the light and dark appearances, <tt>windows11</tt> enables a light counterpart of the built-in dark style, and <tt>zircon</tt> is an alternative light-only style with cyan accents, shown above. For example:
<pre><code class="innosetup"><key>WizardStyle</key>=modern zircon</code></pre>
</li>
<li>Also supported is an <tt>includetitlebar</tt> modifier: Enables custom styling of both title bars and borders. By default, the system's native light or dark title bar is used instead. For example:
<pre><code class="innosetup"><key>WizardStyle</key>=modern dynamic polar includetitlebar</code></pre>
</li>
<li>Also supported is an <tt>excludelightbuttons</tt> modifier: Disables custom styling of all buttons (including command link buttons, as used in task dialogs) when a light style is active. For example:
<pre><code class="innosetup"><key>WizardStyle</key>=modern dynamic windows11 excludelightbuttons</code></pre>
</li>
</ul>
</li>
<li>Custom styles (including the built-in custom dark style) are <i>not</i> activated when the user's system is set to a high-contrast theme or when new command-line parameter <tt>/NOSTYLE</tt> is used.</li>
<li>Compiler IDE: Added a new <i>Wizard Style</i> page to the New Script Wizard, allowing to choose a style and view example screenshots.</li>
<li>Pascal Scripting:
<ul>
<li>Added new support functions <tt>IsWinDark</tt> and <tt>IsDarkInstallMode</tt>.</li>
<li>Added new <tt>StyleElements</tt> and <tt>StyleName</tt> properties to support class <tt>TControl</tt>. See <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeClasses.iss">CodeClasses.iss</a></tt> for an example, which also demonstrates the use of <tt>IsDarkInstallMode</tt>.</li>
</ul>
</li>
</ul>
<span class="head2">Other changes to the look and feel of Setup and Uninstall</span>
<p>The default look and feel of Setup and Uninstall has been further modernized by switching to the Segoe UI font, along with other improvements.</p>
<ul>
<li>Setup now always uses high-quality, system-defined icons instead of custom ones on the <i>Select Destination Location</i> and <i>Preparing to Install</i> wizard pages, and on the <i>Setup Needs the Next Disk</i> form.</li>
<li><tt>[Setup]</tt> section directive <tt>WizardSizePercent</tt> now always defaults to <tt>120,120</tt>, instead of only when you are using <tt>WizardStyle=modern</tt>. As a result, if you are using <tt>WizardStyle=classic</tt>, your Setup windows will increase in size by 20% by default.</li>
<li><tt>[Setup]</tt> section directive <tt>WizardSizePercent</tt> is now supported by Uninstall. As a result, your uninstaller window will increase in size by 20% by default.</li>
<li>Setup and Uninstall now keep the original aspect ratio of their windows when scaling for DPI. As a result, your Setup and Uninstall windows will by default be 16% wider at 125% DPI or higher.<br/>
Can be disabled by setting new <tt>[Setup]</tt> section directive <tt>WizardKeepAspectRatio</tt> to <tt>no</tt>.
</li>
<li>Support for <tt>[Setup]</tt> section directive <tt>WizardResizable</tt> has been dropped, so the user will no longer be able to resize the main Setup wizard window.</li>
<li>The default regular font used by Setup and Uninstall has been changed from 8-point <i>Tahoma</i> to 9-point <i>Segoe UI</i>, for a more modern appearance.<br/>
To use 8-point <i>Tahoma</i> again, use:
<pre><code class="innosetup"><sec>[LangOptions]</sec>
<key>DialogFontName</key>=Tahoma
<key>DialogFontSize</key>=8
<key>DialogFontBaseScaleHeight</key>=13
<key>DialogFontBaseScaleWidth</key>=6</code></pre>
If you were already using 9-point <i>Segoe UI</i>, you will notice a change in scaling when you update. To use your previous scaling, use:
<pre><code class="innosetup"><sec>[LangOptions]</sec>
<key>DialogFontName</key>=Segoe UI
<key>DialogFontSize</key>=9
<key>DialogFontBaseScaleHeight</key>=13
<key>DialogFontBaseScaleWidth</key>=6</code></pre>
</li>
<li>The default large font used by Setup on the <i>Welcome</i> and <i>Setup Completed</i> wizard pages has been changed from 12-point <i>Verdana</i> to 14-point <i>Segoe UI</i>, for a more modern appearance.<br/>
To use 12-point <i>Verdana</i> again, use:
<pre><code class="innosetup"><sec>[LangOptions]</sec>
<key>WelcomeFontName</key>=Verdana
<key>WelcomeFontSize</key>=12</code></pre>
</li>
<li>Pascal Scripting:
<ul>
<li>Added support functions <tt>InitializeBitmapButtonFromStockIcon</tt> and <tt>InitializeBitmapImageFromStockIcon</tt>. Can be used to display various high-quality, system-defined icons, on all versions of Windows.<br/>
See <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeClasses.iss">CodeClasses.iss</a></tt> for an example, and <a href="https://learn.microsoft.com/en-us/windows/win32/api/shellapi/ne-shellapi-shstockiconid#constants">Microsoft Learn</a> for an overview of all available icons.<br/>
<a href="https://jrsoftware.org/images/is-codeclasses-stockicons-125.png">Example screenshot of the new <tt>CodeClasses.iss</tt> example, at 125% DPI and in dark mode</a>.
</li>
<li>Wizard form sizing for <tt>WizardSizePercent</tt> is now done before event function <tt>InitializeWizard</tt> is called, instead of after, consistent with scaling for system DPI or for a custom <tt>DialogFontSize</tt>.<br/>
If you have custom controls that must grow with <tt>WizardSizePercent</tt>, and those controls use the <tt>Anchors</tt> property to achieve this (that is, they have both <tt>akLeft</tt> and <tt>akRight</tt> set, or both <tt>akTop</tt> and <tt>akBottom</tt> set), and they do not use <tt>SurfaceWidth</tt> or <tt>SurfaceHeight</tt>, you must either start using the new <tt>SurfaceExtraWidth</tt> and <tt>SurfaceExtraHeight</tt> properties (as demonstrated by the updated <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeClasses.iss">CodeClasses.iss</a></tt> example script), or switch to using <tt>SurfaceWidth</tt> and <tt>SurfaceHeight</tt>.<br/>
Existing custom code that assigns the <tt>Anchors</tt> property can be removed from your scripts.
</li>
<li>The prototype of support function <tt>CreateCustomForm</tt> has changed. Support class <tt>TSetupForm</tt> has changed as well: function <tt>FlipSizeAndCenterIfNeeded</tt> has been renamed to <tt>FlipAndCenterIfNeeded</tt>, property <tt>SizeAndCenterOnShow</tt> has been renamed to <tt>CenterOnShow</tt>, and property <tt>KeepSizeX</tt> is now read-only. See <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeClasses.iss">CodeClasses.iss</a></tt> for an updated <tt>CreateCustomForm</tt>/<tt>TSetupForm</tt> example.
</li>
</ul>
</li>
</ul>
<span class="head2">Security improvements</span>
<p>Updating is recommended, even if you don't plan to use the other enhancements right away. We continually add extra checks to make your installers safer and more reliable. In this version:</p>
<ul>
<li>In temporary directory/file names, the number of random base-36 digits has been doubled from 5 to 10, and the digits are now generated using a <abbr title="Cryptographically Secure Pseudorandom Number Generator">CSPRNG</abbr> function (<tt>BCryptGenRandom</tt>). This is intended to provide defense against an attack that might depend on the generated names being predictable.</li>
<li>Uninstall now uses a random name for its temporary directory (<tt>is-XXXXXXXXXX-uninstall.tmp</tt>), instead of attempting to re-use a fixed name whenever possible (usually <tt>iu-14D2N.tmp</tt> in previous versions). This is primarily intended to add defense-in-depth. Additionally, this change addresses a non-security issue in previous versions — extremely unlikely to be seen in practice — where if two uninstallers were started near-simultaneously, one could potentially overwrite the other's temporary file.</li>
<li>In previous versions, before Uninstall deleted a pre-existing temporary directory (usually named <tt>iu-14D2N.tmp</tt>), it checked for the <tt>FILE_ATTRIBUTE_REPARSE_POINT</tt> attribute to ensure it wasn't following a junction or symbolic link. However, this check had a <abbr title="Time-of-Check to Time-of-Use">TOCTOU</abbr> problem — it was theoretically possible for the directory to be changed into a junction or symbolic link between the check and the deletion. We are not aware of any way to practically exploit the race condition, and this issue is only potentially relevant when other, untrusted users have write access to the temporary directory, which is not common. (Before Inno Setup 6.5, when Setup/Uninstall ran under the <tt>SYSTEM</tt> account, the world-writable <tt>C:\Windows\Temp</tt> directory was often used, but beginning in Inno Setup 6.5, <tt>C:\Windows\SystemTemp</tt> is used instead on Windows 11 and up-to-date Windows 10 systems.)</li>
</ul>
<span class="head2">Other changes</span>
<ul>
<li>Compiler IDE:
<ul>
<li>Improved the contrast ratio for various syntax highlighting colors, particularly in dark mode.</li>
<li>Updated the default dialog font from 8-point <i>Segoe UI</i> to 9-point <i>Segoe UI</i>.</li>
<li>Enabled dark mode support for the menus on Windows 11 Version 25H2 (2025 Update).</li>
</ul>
</li>
<li><tt>[Setup]</tt> section directive <tt>WizardImageBackColor</tt> and the other three <tt>BackColor</tt> directives now accept the <tt>#rrggbb</tt> color format in addition to <tt>$bbggrr</tt>.</li>
<li>Setup command-line parameter <tt>/SUPPRESSMSGBOXES</tt> can now suppress additional early fatal error messages and the final restart error message. The parameter still only has an effect when combined with <tt>/SILENT</tt> or <tt>/VERYSILENT</tt>.</li>
<li>Pascal Scripting:
<ul>
<li>Added support for command link buttons (the button style used in task dialogs). See <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeClasses.iss">CodeClasses.iss</a></tt> for an example.</li>
<li>Added support functions <tt>Round</tt>, <tt>Trunc</tt>, <tt>Int</tt>, and <tt>MulDiv</tt>.</li>
<li>Added support function <tt>StrToColor</tt>.</li>
<li>Undid the change made to the <tt>CurPageChanged</tt> event function in version 6.5.0.</li>
</ul>
</li>
<li>If Windows returns a <a href="https://learn.microsoft.com/en-us/troubleshoot/windows-server/shell-experience/temp-folder-with-logon-session-id-deleted">temporary directory that does not exist</a>, Setup and Uninstall will now recreate it, but only if they detect the specific scenario described in the linked article. Starting with version 6.5.0, Setup and Uninstall could not run in this scenario. Prior to version 6.5.0, they would select a different temporary directory, which was also undesirable.</li>
<li>Minor improvements and fixes.</li>
</ul>
</details>
<details>
<summary>Inno Setup 6.5</summary>
<p><a name="6.5.4"></a><span class="ver">6.5.4 </span><span class="date">(2025-09-24)</span></p>
<ul>
<li><i>Fix:</i> Pascal Scripting: Using event function <tt>CurInstallProgressChanged</tt> would result in runtime errors.</li>
</ul>
<p>Using Inno Setup commercially? Please <a href="https://jrsoftware.org/isorder.php">purchase a license</a>.</p>
<p><a name="6.5.3"></a><span class="ver">6.5.3 </span><span class="date">(2025-09-11)</span></p>
<ul>
<li><i>Fix:</i> Compiler IDE: The New Script Wizard would generate <tt>[Files]</tt> section entries with random values for the <tt>ExternalSize</tt> parameter.</li>
</ul>
<p><a name="6.5.2"></a><span class="ver">6.5.2 </span><span class="date">(2025-09-10)</span></p>
<span class="head2">Improved graphics</span>
<p>It's now possible to use <tt>.png</tt> files in Setup and Uninstall, and use of transparency has been increased.</p>
<ul>
<li>Added support for <tt>.png</tt> files to <tt>[Setup]</tt> section directives <tt>WizardImageFile</tt> and <tt>WizardSmallImageFile</tt>.</li>
<li>Improved support for stretching 32-bit <tt>.bmp</tt> files with transparency.</li>
<li>The built-in wizard images and icons now have transparent backgrounds, allowing their background colors to be customized again using <tt>[Setup]</tt> section directives <tt>WizardImageBackColor</tt> and <tt>WizardSmallImageBackColor</tt>, which are no longer obsolete.<br/>
The default values of these directives match previously used colors, so the appearance of all images and icons remains unchanged by default.</li>
<li>Pascal Scripting:
<ul>
<li>Added new <tt>TPngImage</tt> support class.</li>
<li>Added new <tt>PngImage</tt> property to support classes <tt>TBitmapButton</tt> and <tt>TBitmapImage</tt>.</li>
</ul>
</li>
</ul>
<span class="head2">Removed main size limits</span>
<p>The size limit of 2 GB for a single <tt>Setup.exe</tt> and for disk slices has been removed.</p>
<ul>
<li>The maximum size for a single <tt>Setup.exe</tt> without disk spanning has increased from almost 2 GB to nearly 4 GB, which is near the maximum Windows supports.<br/>
However, disk spanning is still recommended for large executables due to slow startup times imposed by Windows, especially when the executables are digitally signed.</li>
<li>With disk spanning enabled, the maximum disk slice size has been increased from almost 2 GB to effectively unlimited (9223 PB).<br/>
The default disk slice size is still <tt>2100000000</tt>, which is almost 2 GB. To update, you can simply set <tt>[Setup]</tt> section directive <tt>DiskSliceSize</tt> to <tt>max</tt>.</li>
</ul>
<span class="head2">Improved downloading and archive extraction</span>
<ul>
<li>All download functionality now supports TLS 1.3 when available. Support for TLS 1.0 and 1.1 has been removed on all versions of Windows.</li>
<li>Archive extraction now supports the RAR5 format. Requires <tt>[Setup]</tt> section directive <tt>ArchiveExtraction</tt> to be set to <tt>full</tt>.</li>
<li>Compiler IDE: The New Script Wizard and the <i>Generate [Files] Entries</i> tool now support adding files to be downloaded. They will prompt you if the downloaded file is an archive that should be extracted.</li>
<li><i>Fix:</i> Using <tt>[Files]</tt> section flags <tt>download</tt> and <tt>extractarchive</tt> on an entry that also has a <tt>Tasks</tt> parameter now works as expected.</li>
</ul>
<span class="head2">Other changes</span>
<ul>
<li>Compiler IDE:
<ul>
<li>Added new <i>Automatically reload files</i> and <i>Allow Undo after reload</i> options. Both are enabled by default, consistent with most other modern editors, and improving integration with tools like Claude Code.</li>
<li>Added dark mode support for command-line options <tt>/cc</tt> and <tt>/wizard</tt>.</li>
</ul>
</li>
<li>Pascal Scripting: Added new <tt>HighContrastActive</tt> and <tt>LogFmt</tt> support functions.</li>
<li>Minor tweaks and fixes.</li>
</ul>
<p><a name="6.5.1"></a><span class="ver">6.5.1 </span><span class="date">(2025-08-18)</span></p>
<ul>
<li>Downloads are now performed from a secondary thread, just as was first introduced for archive extraction in the previous version. This ensures Setup stays responsive, even if the system fails to report progress.</li>
<li><i>Fix:</i> Using the <tt>/cc</tt> command-line option of the Compiler IDE to compile a script no longer causes an error.</li>
<li>Minor tweaks.</li>
</ul>
<p><a name="6.5.0"></a><span class="ver">6.5.0 </span><span class="date">(2025-08-12)</span></p>
<span class="head2">Introducing commercial licenses</span>
<p>Over the years, a number of users have expressed to us a desire to see their organizations support the ongoing development of Inno Setup, but have found that organization policies often make it difficult or impossible to approve a donation. By introducing a commercial license option, we aim to provide a straightforward and familiar way for organizations to contribute to the project's sustainability.</p>
<p>Additionally, many organizations prefer having official licenses on record for all software they use, as it helps with audits and internal compliance checks.</p>
<p>Finally, your support through license purchases directly enables us to improve and maintain Inno Setup.</p>
<p>For these reasons we are introducing commercial licenses. If you or your organization benefit from using Inno Setup in a commercial context, we kindly ask that you purchase a license. Thank you for helping ensure the continued development of this software.</p>
<p>Licenses can be purchased from our <a href="https://jrsoftware.org/isorder.php">new order page</a>, which includes more questions and answers. All commercial licenses are perpetual and require a single payment. They include two years of updates, major and minor. After this period, your current version will remain licensed and functional as-is.</p>
<span class="head2">Improved archive extraction</span>
<p>It's now possible to extract password-protected archives, multi-volume archives, and multiple extra archive formats such as <tt>.zip</tt>.</p>
<p>Additionally, the <tt>[Files]</tt> section now supports archive extraction. Writing Pascal Script to extract an archive is no longer necessary.</p>
<p>All of this is optional and does <i>not</i> increase the size of Setup if not used.</p>
<ul>
<li>Updated <tt>[Setup]</tt> and <tt>[Files]</tt> section:
<ul>
<li>Added new <tt>[Setup]</tt> section directive <tt>ArchiveExtraction</tt> to specify the method of archive extraction used by new <tt>[Files]</tt> section flag <tt>extractarchive</tt> (see below) and support functions <tt>ExtractArchive</tt> and <tt>CreateExtractionPage</tt>:
<ul>
<li><tt>basic</tt> (default) is the method introduced by Inno Setup 6.4.0. It only supports <tt>.7z</tt> archives that are not password-protected.</li>
<li><tt>enhanced/nopassword</tt> is a new method and internally uses <tt>7zxr.dll</tt> from the 7-Zip source code by Igor Pavlov, as-is, except that it was recompiled, code-signed, and renamed to <tt>is7zxr.dll</tt>. Compared to <tt>basic</tt>, it has lower memory requirements for archives that contain large files but increases the size of the Setup file(s). It still only supports <tt>.7z</tt> archives that are not password-protected.</li>
<li><tt>enhanced</tt> uses <tt>7zxa.dll</tt> instead of <tt>7zxr.dll</tt>, recompiled, code-signed, and renamed to <tt>is7zxa.dll</tt>. It still only supports <tt>.7z</tt> archives, but they may be password-protected.</li>
<li><tt>full</tt> uses <tt>7z.dll</tt> instead of <tt>7zxa.dll</tt>, recompiled, code-signed, and renamed to <tt>is7z.dll</tt>. It supports multiple archive formats (<tt>.7z</tt>, <tt>.zip</tt>, <tt>.rar</tt>, and more), although not as many as the original <tt>7z.dll</tt>, to reduce its size. Additionally, it supports multi-volume archives.</li>
</ul>
New documentation topic <tt><a href="https://jrsoftware.org/ishelp/index.php?topic=setup_archiveextraction">ArchiveExtraction</a></tt> has a table summarizing the differences between these methods.
</li>
<li>Added new <tt>[Files]</tt> section flag <tt>extractarchive</tt> and parameter <tt>ExtractArchivePassword</tt>, intended to enable the seamless integration and extraction of archives.
<ul>
<li>The supported archive formats, beyond <tt>.7z</tt>, and the support for password-protected and multi-volume archives, depend on the aforementioned <tt>ArchiveExtraction</tt> directive, that must not be set to <tt>basic</tt>.</li>
<li>Flag <tt>extractarchive</tt> must be combined with the <tt>external</tt> and <tt>ignoreversion</tt> flags. It is usually also combined with the <tt>recursesubdirs</tt> and <tt>createallsubdirs</tt> flags.</li>
<li>Using a solid archive is not recommended; extraction performance may degrade depending on the solid block size.</li>
<li>Archive extraction otherwise behaves the same as external file copying. For example, it supports automatic uninstallation of extracted files and can be combined with same other flags and parameters.</li>
<li>Example script:
<pre><code class="innosetup"><sec>[Setup]</sec>
<key>ArchiveExtraction</key>=enhanced/nopassword
<sec>[Files]</sec>
<key>Source</key>: "<con>{tmp}</con>\MyProg-ExtraReadmes.7z"; <key>DestDir</key>: "<con>{app}</con>"; \
<key>Flags</key>: external extractarchive recursesubdirs createallsubdirs ignoreversion</code></pre>
</li>
</ul>
</li>
<li>Archive extraction now honors the file system redirection state set by 64-bit install mode, entry flags, and support function <tt>EnableFsRedirection</tt>.</li>
</ul>
</li>
<li>Updated Pascal Scripting:
<ul>
<li>New support function <tt>ExtractArchive</tt> replaces the deprecated <tt>Extract7ZipArchive</tt>. <tt>ExtractArchive</tt> includes an additional parameter to optionally specify a password.</li>
<li><tt>ExtractArchive</tt> and <tt>CreateExtractionPage</tt> now overwrite read-only files which already exist in the destination directory without prompting the user. Previously this would cause an extraction error.</li>
<li>Added new <tt>MapArchiveExtensions</tt> support function to allow the extraction of archives with custom extensions, such as self-extracting archives.</li>
<li>Added new <tt>AddEx</tt> function to support class <tt>TExtractionWizardPage</tt> to add password-protected archives.</li>
</ul>
</li>
</ul>
<span class="head2">Improved file downloads</span>
<p>The <tt>[Files]</tt> section now supports file downloads. Writing Pascal Script to download a file is no longer necessary and is in fact less efficient since it requires an intermediate temporary file which this new download support doesn't.</p>
<ul>
<li>Updated <tt>[Files]</tt> section:
<ul>
<li>Added new <tt>[Files]</tt> section flag <tt>download</tt> and parameters <tt>DownloadUserName</tt> and <tt>DownloadPassword</tt>, intended to enable the seamless integration of downloaded files.</li>
<li>Supports HTTPS (but not expired or self-signed certificates) and HTTP. Redirects are automatically followed and proxy settings are automatically used. Safe to use from services.</li>
<li>Flag <tt>download</tt> must be combined with the <tt>external</tt> and <tt>ignoreversion</tt> flags. Additionally, the <tt>DestName</tt> and <tt>ExternalSize</tt> parameters must be set.<br/>
It can also be combined with the new <tt>issigverify</tt> flag (see below) for efficient and highly secure verification of the download file.<br/>
It cannot be combined with the <tt>comparetimestamp</tt>, <tt>recursesubdirs</tt> and <tt>skipifsourcedoesntexist</tt> flags.</li>
<li>File download otherwise behaves the same as external file copying. For example, it supports automatic uninstallation of downloaded files and can be combined with same other flags and parameters.</li>
<li>When combined with the new <tt>extractarchive</tt> flag (see above), the archive will be downloaded and, if the <tt>issigverify</tt> flag is also used, verified at the start of the <i>Preparing to Install</i> step. The archive is then extracted normally during the actual installation process.<br/>
In this case, the value of <tt>DestName</tt> is used to determine the archive format and for display and logging purposes.</li>
<li>Example script:
<pre><code class="innosetup"><sec>[Files]</sec>
<key>Source</key>: "https://jrsoftware.org/download.php/is.exe?dontcount=1"; \
<key>DestName</key>: "innosetup-latest.exe"; <key>DestDir</key>: "<con>{app}</con>"; \
<key>ExternalSize</key>: 7_000_000; <key>Flags</key>: external download ignoreversion
<key>Source</key>: "https://jrsoftware.org/download.php/myprog-extrareadmes.7z"; \
<key>DestName</key>: "MyProg.ExtraReadmes.7z"; <key>DestDir</key>: "<con>{app}</con>"; \
<key>ExternalSize</key>: 275; <key>Flags</key>: external download extractarchive ignoreversion</code></pre>
</li>
<li>Added example script <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/DownloadFiles.iss">DownloadFiles.iss</a></tt> to demonstrate how to use a single <tt>[Files]</tt> entry to download a file, or to download and extract an archive, with verification.</li>
</ul>
</li>
</ul>
<span class="head2">New signature-verification capability</span>
<p>Inno Setup now includes an integrated signature-verification capability that can be used to detect corruption or tampering in your files at compile time, before files are included in an installer being built, or during installation, before Setup copies external files onto a user's system.</p>
<p>Any type of file may be signed and verified, and creation of signatures does <i>not</i> require a certificate from a certificate authority. There is no cost involved.</p>
<p>Note, however, that these signatures cannot be used to eliminate an "Unknown publisher" warning message shown by Windows when an installer or other EXE file is started. That requires a completely different kind of signature (Authenticode) embedded inside the EXE file by a different tool (Microsoft's <tt>signtool.exe</tt>), and it does require a (usually expensive) code-signing certificate from a certificate authority.</p>
<p>A more detailed summary:</p>
<ul>
<li>New <tt>[ISSigKeys]</tt> section:
<ul>
<li>Added a new optional <tt>[ISSigKeys]</tt> section for defining keys used by the compiler and Setup to verify file signatures.</li>
<li>Supports parameters <tt>Name</tt> (required) and <tt>Group</tt> to identify keys, parameters <tt>KeyFile</tt>, <tt>PublicX</tt>, and <tt>PublicY</tt> to specify the key values, parameter <tt>KeyID</tt> to double-check the key values, and parameter <tt>RuntimeID</tt> for runtime identification of the key.</li>
<li>Key files are human-readable and can be created using Inno Setup Signature Tool (see below).</li>
<li>Example section:
<pre><code class="innosetup"><sec>[ISSigKeys]</sec>
<key>Name</key>: anna; <key>KeyFile</key>: "anna.ispublickey"; <key>Group</key>: exesigner
<key>Name</key>: ryan; <key>KeyFile</key>: "ryan.ispublickey"; <key>Group</key>: exesigner
<key>Name</key>: ivan; <key>KeyFile</key>: "ivan.ispublickey"; <key>Group</key>: docsigner
<com>; max is trusted for both exe and doc signing</com>
<key>Name</key>: max; <key>KeyFile</key>: "max.ispublickey"; <key>Group</key>: exesigner docsigner
<com>; the boss also has a key</com>
<key>Name</key>: bosskey; <key>KeyFile</key>: "boss.ispublickey"</code></pre>
</li>
</ul>
</li>
<li>Updated <tt>[Files]</tt> section:
<ul>
<li>Added a new <tt>issigverify</tt> flag for enforcing cryptographic signature verification of source files using a key from the <tt>[ISSigKeys]</tt> section, enhancing security during both compilation and installation.</li>
<li>When used without the <tt>external</tt> flag, verification is performed during compilation, aborting if it fails. When used with the <tt>external</tt> flag, verification occurs during installation, ensuring the integrity of files as they are copied.</li>
<li>Requires an <tt>.issig</tt> signature file to be present in the same directory as the source file. Signature files are human-readable files and can be created using the Inno Setup Signature Tool.</li>
<li>Has little performance impact since verification occurs while source files are being compressed/copied and each file's contents are only read once; the only extra I/O comes from reading the tiny <tt>.issig</tt> files. Only archives and downloaded files are read a second time.</li>
<li>The verification process is protected against the Time-Of-Check to Time-Of-Use (TOCTOU) problem.</li>
<li>Can be used to verify downloaded files, offering flexibility over SHA-256 checks as script changes aren't needed for file updates. See the new <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/DownloadFiles.iss">DownloadFiles.iss</a></tt> example script for an example.</li>
<li>Added a new and optional <tt>ISSigAllowedKeys</tt> parameter to restrict which keys or groups of keys from the <tt>[ISSigKeys]</tt> section are permitted for signature verification using the <tt>issigverify</tt> flag.</li>
<li>Note: The <tt>issigverify</tt> flag cannot be combined with the <tt>sign</tt> or <tt>signonce</tt> flags. Use <tt>signcheck</tt> instead.</li>
<li>Example section:
<pre><code class="innosetup"><sec>[Files]</sec>
<key>Source</key>: "MyProg.exe"; <key>DestDir</key>: "<con>{app}</con>"; \
<key>ISSigAllowedKeys</key>: "exesigner bosskey"; <key>Flags</key>: issigverify
<key>Source</key>: "MyProg.chm"; <key>DestDir</key>: "<con>{app}</con>"; \
<key>ISSigAllowedKeys</key>: "docsigner bosskey"; <key>Flags</key>: issigverify
<key>Source</key>: "<con>{src}</con>\Extra\*.chm"; <key>DestDir</key>: "<con>{app}</con>"; \
<key>ISSigAllowedKeys</key>: "docsigner bosskey"; <key>Flags</key>: issigverify external; \
<key>Excludes</key>: "*.issig"
<key>Source</key>: "https://jrsoftware.org/download.php/is.exe?dontcount=1"; <key>DestDir</key>: "<con>{app}</con>"; \
<key>ISSigAllowedKeys</key>: "exesigner bosskey"; \
<key>Flags</key>: issigverify external download ignoreversion; \
<key>DestName</key>: "innosetup-latest.exe"; <key>ExternalSize</key>: 7_000_000</code></pre>
</li>
</ul>
</li>
<li>New Inno Setup Signature Tool:
<ul>
<li>Added <tt>ISSigTool.exe</tt>, a new command-line utility designed to sign files using ECDSA P-256 cryptographic signatures.</li>
<li>Offers commands to sign and verify files, to export public keys and to generate private keys.</li>
<li>Example commands:
<pre><code>issigtool --key-file="MyKey.isprivatekey" generate-private-key
issigtool --key-file="MyKey.isprivatekey" sign "MyProg.dll"
issigtool --key-file="MyKey.isprivatekey" export-public-key "MyKey.ispublickey"
issigtool --key-file="MyKey.ispublickey" verify "MyProg.dll"</code></pre>
</li>
</ul>
</li>
<li>Updated documentation:
<ul>
<li>Added new <a href="https://jrsoftware.org/ishelp/index.php?topic=issigkeyssection"><tt>[ISSigKeys]</tt> section</a> topic.</li>
<li>Updated <a href="https://jrsoftware.org/ishelp/index.php?topic=filessection"><tt>[Files]</tt> section</a> topic.</li>
<li>Added new <a href="https://jrsoftware.org/ishelp/index.php?topic=issig"><tt>.issig</tt> Signatures: Introduction</a> topic.</li>
<li>Added new <a href="https://jrsoftware.org/ishelp/index.php?topic=issigtool">Inno Setup Signature Tool</a> topic.</li>
</ul>
</li>
<li>Other related changes:
<ul>
<li>The compiler now verifies additional precompiled files, such as <tt>Setup.e32</tt> and <tt>SetupLdr.e32</tt>, to ensure they remain unchanged before using them. Can be disabled using new <tt>[Setup]</tt> section directive <tt>DisablePrecompiledFileVerifications</tt>, though doing so is <i>not</i> recommended.</li>
<li>Added new <tt>[Files]</tt> section parameter <tt>Hash</tt>. Instructs the compiler or Setup to do a simple SHA-256 hash check instead of a full signature verification, as an alternative to using the <tt>issigverify</tt> flag.<br/>
Example script:
<pre><code class="innosetup"><sec>[Files]</sec>
<key>Source</key>: "https://jrsoftware.org/download.php/iscrypt.dll?dontcount=1"; \
<key>DestName</key>: "ISCrypt.dll"; <key>DestDir</key>: "<con>{app}</con>"; \
<key>Hash</key>: "2f6294f9aa09f59a574b5dcd33be54e16b39377984f3d5658cda44950fa0f8fc"; \
<key>ExternalSize</key>: 2560; <key>Flags</key>: external download ignoreversion</code></pre>
</li>
<li>Pascal Scripting:
<ul>
<li>Added new <tt>ISSigVerify</tt> and <tt>DownloadTemporaryFileWithISSigVerify</tt> support functions.</li>
<li>Added new <tt>AddWithISSigVerify</tt> and <tt>AddExWithISSigVerify</tt> functions to support class <tt>TDownloadWizardPage</tt>. See updated example script <tt><a href="https://raw.githubusercontent.com/jrsoftware/issrc/refs/heads/main/Examples/CodeDownloadFiles.iss">CodeDownloadFiles.iss</a></tt> for an example.</li>
</ul>
</li>
</ul>
</li>
</ul>
<span class="head2">Other changes</span>
<ul>