Inno Setup 7 introduced 64-bit compilers and installers.
Both the 32-bit and 64-bit editions of Inno Setup 7 can be installed side by side, and they can coexist alongside Inno Setup 6.
Great care has been taken to ensure maximum backward compatibility with Inno Setup 6, and compatibility between 32-bit and 64-bit installers.
64-bit Installers:
Set SetupArchitecture to x64 to build a 64-bit x64 installer instead of a 32-bit x86 installer. This also changes the default values of ArchitecturesAllowed and ArchitecturesInstallIn64BitMode to x64compatible, making 64-bit installers default to 64-bit install mode.
Key benefits and differences:
- 64-bit installers allow a maximum dictionary size for compression methods lzma and lzma2 of 3.8 GB instead of 1 GB. Review the memory requirements listed in the Compression topic before using large dictionary sizes.
- 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.
- 64-bit installers fully support 32-bit install mode. 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 ArchitecturesInstallIn64BitMode to a blank value to override the new default.
- Existing installations made by 32-bit installers can be updated by 64-bit installers without issue, and vice versa.
- 64-bit Pascal Scripting notes:
- In 32-bit installers, type Extended is 10 bytes, while in 64-bit installers it is 8 bytes and just an alias for type Double.
- In 32-bit installers, types NativeInt and NativeUInt are 4 bytes, while in 64-bit installers they are 8 bytes. The same is true for all types derived from them, such as HWND.
Example script CodeDll.iss demonstrates how to support both 32-bit and 64-bit installers from a single script.
Please note: Even though types like HWND are 8 bytes (64-bit) in 64-bit processes, 64-bit Windows uses 32-bit handle values for interoperability
. 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.
- 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.
- 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 Exec function or the [Run] section.
- 64-bit type libraries (.tlb) can only be (un)registered by 64-bit installers, and 32-bit type libraries only by 32-bit installers.
Support for (un)registering 64-bit type libraries from a 32-bit installer has been dropped.
- {sysnative} 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.
- 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 DISM, 64-bit installers still function correctly, even when run in 32-bit install mode.
64-bit Compiler IDE and ISCC:
Install the 64-bit edition of Inno Setup to run 64-bit versions of the Compiler IDE and ISCC. Both editions read the same scripts and defaults, and either can generate 32-bit or 64-bit installers.
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.
Using the 64-bit edition is recommended.
Key benefits and differences:
- Either edition can generate installers of either architecture: 32-bit compilers can build 64-bit installers, and vice versa.
- Both editions can be installed side by side and include the same examples and help files.
- 64-bit compilers generally achieve faster LZMA compression while maintaining full compatibility with existing scripts.
On Arm64-based Windows 11, they use an ARM64EC binary (islzma-Arm64EC.dll) for native performance.
- The [Setup] directive LZMAUseSeparateProcess is ignored by 64-bit compilers, because 64-bit processes can directly allocate more memory, eliminating the need for an out-of-process compressor.