Using 64-Bit Windows Installer Packages
When you create 64-bit Windows Installer Packages or applications that call Windows Installer to install 64-bit packages, do the following:
- Use a Windows Installer database schema of 200 or higher. Specify that version 2.0 is the minimum version of the installer required to install the package by setting the Page Count Summary property to the integer 200. Earlier Windows Installer versions reject attempts to install 64-bit packages. For 64-bit packages on the Arm64 platform, the Windows Installer database schema must be 500 or higher.
- Indicate in the Template Summary property of the package summary information stream that this is a 64-bit package. Enter "Intel64" into the platform field of the Template Summary property if the package is to be run on an Intel64 processor. Enter "x64" if the package is to be run on a 64-bit extended processor. Enter “Arm64” if the package is to be run on an Arm64 processor. A package cannot be marked as supporting both Intel64 and x64 platforms, a Template Summary property value of "Intel64,x64" is invalid. A package cannot be marked as supporting both 32-bit and 64-bit platforms, the Template Summary property values of "Intel,x64" or "Intel,Intel64" are invalid.
- Identify every 64-bit component by setting the msidbComponentAttributes64bit in the Attributes column of the Component table.
- Use optional conditional statements that check the version of the 64-bit operating system by referencing the VersionNT64 property. Windows Installer sets this property to the 64-bit Windows version and leaves VersionNT64 undefined if the operating system is not 64-bit Windows. For more information, see Using Properties in Conditional Statements.
- Use optional conditional statements that check the numeric processor level of the computer by referencing the Intel64 or Msix64 property. The Windows Installer sets these properties to the current numeric processor level of the computer and leaves the Intel64 Property undefined if this is not an Itanium-based processor. For more information, see Using Properties in Conditional Statements.
- Use the AppSearch Table and AppSearch Action to do optional searches of the registry for existing 64-bit components. To search for existing 64-bit components, include the msidbLocatorType64bit bit in the Type column of the RegLocator Table. For more information, see Searching for Existing Applications, Files, Registry Entries or .ini File Entries Property
- Obtain the paths to system folders by referencing the System64FolderProperty, ProgramFiles64Folder Property, and CommonFiles64Folder Property for the 64-bit folders and the SystemFolder Property, ProgramFilesFolder Property, and CommonFilesFolder Property for the 32-bit folders.
- Verify that the application uses the correct GUID when referencing a 64-bit component. If there are 32-bit and 64-bit versions of a specific component, these should have different component ID GUIDs.
- Determine whether any new environment variables need to be defined when installing 64-bit applications.
- If a 64-bit ODBC Driver Manager is to be installed, the component that carries it should be named ODBCDriverManager64. The ODBC Driver Manager must be authored in the installer package and a component named ODBCDriverManager64 must be included. The manager will be installed if necessary.
- Verify that the application only calls 32-bit services that run as executables. Applications should not call 32-bit services that run in DLLs.
- If the application installs coexisting 32-bit and 64-bit versions of a component, verify that the application shares .ini file information correctly.
- Verify that the application only applies 32-bit patches to 32-bit binaries and 64-bit patches to 64-bit binaries.
- Consider future upgrade scenarios for both 32-bit and 64-bit versions and maintain upgrade codes. For more information, see Patching and Upgrades.
- When using a bootstrapping application to install a 64-bit Windows Installer Package, compile the bootstrapping application as a 64-bit application.
- To disable Registry Reflection for registry keys that are affected by a particular component, set the msidbComponentAttributesDisableRegistryReflection bit in the Attributes field of the Component table. This may be necessary to have 32-bit and 64-bit copies of the same application coexist. If this bit is set, the Windows Installer calls the RegDisableReflectionKey function on each key that is being accessed by the component. This bit is available with Windows Installer version 4.0. This bit is ignored on 32-bit systems. This bit is ignored on the 64-bit versions of Windows XP and Windows 2000.
The value of the numeric registry root returned by the lpPathBuf parameter of the MsiGetComponentPath function distinguishes between components on 32-bit and 64-bit operating systems. For more information, see MsiGetComponentPath function.