Shop

InstallShield
Advanced Installer
AdminStudio
more / weitere

InstallShield und AdminStudio Schulungen

weitere Infos

More Windows Installer articles

Microsoft Windows Installer 2.0

Abstract: Microsoft has released version 2.0 of the Windows Installer runtime files and the Windows Installer SDK. Besides support for Windows XP and 64 bit applications, this version includes bug fixes and introduces useful operating system properties, e.g. to detect whether setup is running on NT Workstation or Server, or an XP Professional or Home Edition. It also significantly simplifies updates by eliminating the need for complicated ADDLOCAL and REINSTALL constructs, and no longer requires a reboot after installing the runtime files. The good news is that you can benefit from these improvements in your existing projects. Some modifications in your authoring tool may be required to install the new runtime files. As a result of the improvements and fixes in MSI 2.0 you may find that your setups and patches behave differently than they used to or even fail. Even if you don't include MSI 2.0 in your own setup, the new version may already be present on the target machine, so you should at least include MSI 2.0 in your testing scenario.

Last update: 2003-04-10

GERMAN Dieser Artikel in deutsch

Where to obtain MSI 2.0

If you're like me you want to go ahead and play with the new version before getting into the theory. Be warned that installing the new SDK will update common files that InstallShield uses to build your releases. In order to keep your production machine in a known good state until you have fully explored the implications of MSI 2.0 you should use a test machine to play with the new SDK and runtime files.

Redistributable packages to install the latest version of Windows Installer can be downloaded from the following URLs:

For Windows NT 4 and Windows 2000:
http://www.microsoft.com/downloads/release.asp?releaseid=32832

For Windows 95, Windows 98 and Windows Me:
http://www.microsoft.com/downloads/release.asp?releaseid=32831

Please note that the system requirements have changed for Windows NT which now requires Service Pack 6. For previous MSI versions Service Pack 3 was sufficient.

Both redistributable files are named Instmsi.exe. For use with InstallShield you should rename the Unicode version (for Windows NT/2000) to InstmsiW.exe, and the ANSI version (for Windows 95/98/ME) to InstmsiA.exe.

If you have downloaded the MSI 2.0 redistributables before September 25, 2001, you should redownload the version for Windows 9X. MSI 2.0 has first been published on August 28, 2001 with a version number of 2.0.2600.0. However this release has been withdrawn from the web site about three weeks later. On September 25 MSI 2.0 became available again, with a new version 2.0.2600.1 for Windows 9X. The Unicode version is not affected by this change. There is no official information about the reasons behind this, but rumors has it that problems were detected with Windows ME.

The documentation for Windows Installer 2.0 is included in the August 2001 edition of the Microsoft Platform SDK. You can download the SDK or order it on CD from http://www.microsoft.com/msdownload/platformsdk/sdkupdate . The documentation is also available for online reading at  http://msdn.microsoft.com/library/en-us/msi/hh/msi/wiport_6gf9.asp

New Operating System Properties in MSI 2.0

MSI 2.0 introduces a bunch of new properties. Many of them deal with the installation of .NET assemblies and 64 bit applications, such as the MsiNetAssemblySupport and System64Folder properties. To support these new technologies you have to use InstallShield Developer 7. But there are several other new properties that come in handy for "old fashioned" applications, too. These can be used to identify the exact type or "flavor" of Windows your setup is running on, without having to get this information from registry entries. The following table summarizes some of these new properties, together with the value of the VersionNT property.

(A) VersionNT property
(B) MsiNTProductType property
(C) MsiNTSuiteEnterprise property
(D) MsiNTSuitePersonal property

Operating System (A) (B) (C) (D)
Windows NT 4.0 Workstation 400 1 - -
Windows NT 4.0 Domain Controller 400 2 - -
Windows NT 4.0 Server 400 3 - -
Windows 2000 Professional 500 1 - -
Windows 2000 Domain Controller 500 2 - -
Windows 2000 Server 500 3 - -
Windows 2000 Advanced Server 500 3 1 -
Windows XP Home Edition 501 1 - 1
Windows XP Professional 501 1 - -
Windows 2003 Domain Controller 502 2 - -
Windows 2003 Server 502 3 - -
Windows 2003 Enterprise Server 502 3 1 -

Information about the Windows 2003 server versions is subject to change, as they are still in beta.

The following new operating system properties are only valid on Windows 2000 or above:

Bug Fixes

Although there are no official release notes that list issues fixed in MSI 2.0, testing shows that several bugs have been fixed, like the following:

Other errors have not been fixed, like the MinVersion field in the AppSearch table not working as documented (the file version must be greater than the value you enter in the MinVersion field, not greater or equal as the MSI 2.0 help file says).

Updates and Patches

MSI 2.0 removes some of the weird limitations and rules you had to follow when creating a new version of your product:

For patches the effects of the Version Relationship setting have changed - actually it now works as intended. If you have created a patch that targets multiple older versions, and have accepted InstallShield's default of "New version >= previous version" it is likely to fail! Users have reported error 2768:  "Transform in patch package is invalid" when they tried to apply such a patch. It is highly recommended to use "New version = previous version" instead. The wording in the patch wizard is misleading, actually the meaning is "Existing version = base version", where base version is the version that the patch targets. Suppose you have a patch that should update version 1.0.1 of your product to version 1.0.2, then the base version would be 1.0.1. This patch should only be applied to a system where version 1.0.1 is currently installed, not on higher versions. This is all very confusing, as it had been documented incorrectly in earlier versions of the Windows Installer SDK, and also never worked as documented until MSI 2.0.

Several other bugs in the patching process also have been fixed.

Other Improvements

Overview of Windows Installer Versions

The following table summarizes all released versions of Windows Installer:

Release Version of Msi.dll Remarks
Windows Installer 1.0 1.0.5104.0 Included with Office 2000 and released as a redistributable
Windows Installer 1.10 1.10.1029.0 Included in Windows 2000
1.10.1029.1 Released as a redistributable
Windows Installer 1.11 1.11.1314.0 Included in Windows 2000 Service Pack 1
1.11.2405.0 Included in Windows 2000 Service Pack 2
Windows Installer 1.20 1.20.1410.0 Included in Windows Millennium Edition
1.20.1827.1 Released as a redistributable
Windows Installer 2.0 2.0.2600.0 Included in Windows XP and released as a redistributable (see note below)
2.0.2600.1 Released as a redistributable for Windows 95/98/ME
Included in Windows 2000 Service Pack 3
2.0.2600.2 Released as a redistributable (not for Windows XP)
2.0.2600.1106 Included in Windows XP Service Pack 1
2.0.3590.0 Included in Windows .NET Server (Beta 3)

Note: The initial release of MSI 2.0 was version 2.0.2600.0 for both Unicode and ANSI versions. However a problem was detected with the ANSI version, so it has been replaced with version 2.0.2600.1. The Unicode version is still at version 2.0.2600.0.

Platform Support for Windows Installer

Version 2.0 of Instmsi.exe can be used to update the Windows Installer runtime files on Windows 2000 and Windows Me. Windows XP already comes with the latest files. Note that Service Pack 6 is required on Windows NT 4, while Service Pack 3 was sufficient for previous versions of Windows Installer.

The following table shows which versions of Windows Installer redistributables can be installed on which versions of Windows:

Windows version Supported Windows Installer versions
1.0 1.1 1.2 2.0
Windows 95 + + + +
Windows 98 + + + +
Windows Me - - + +
Windows NT 4 SP3 + + + -
Windows NT 4 SP6 + + + +
Windows 2000 - * - +
Windows XP - - - *
Windows 2003 Server - - - *

- not supported
+ can be installed or updated
* included, cannot be installed

Installing the MSI 2.0 Runtimes with InstallShield

InstallShield Developer 7.0

InstallShield Developer 7.00 can update the Windows Installer runtime files on all operating systems (including Windows 2000), however as of this writing some modifications are required, as described below. InstallShield Developer 7.01 fully supports for MSI 2.0, so the below instractions do not apply.

Before you start with the modifications create backups of all affected files.

1. Update the Windows Installer redistributables

After you have downloaded the Instmsi.exe file for Windows NT/2000 and Windows 95/95/Me rename them to InstmsiW.exe and InstmsiA.exe respectively. Copy them to the redistributables folder that is normally located at [ProgramFilesFolder]\InstallShield\Developer\Redist\Language Independent\i386.

2. Update the MSI version number for setup.ini

To update the MsiVersion entry that gets written in the [Startup] section of setup.ini each time you build a release go to the following registry entry:
HKEY_LOCAL_MACHINE\Software\InstallShield\Devloper\7.0
and change the string entry named "Msi Version" to "2.0.2600.1".

3. Enable MSI update on Windows 2000

Update the template for setup.ini which is typically found at [ProgramFilesFolder]\InstallShield\Developer\Support\Setup.ini by adding the following section:

[Win2K]
MajorVer=5
MinorVer=0
BuildNo=2195
PlatformId=2

In the same file in section [SupportOS] add the line:
Win2K=1

4. Adjust the Service Pack requirement for Windows NT 4

Another required update to the Setup.ini template is to change the service pack number for Windows NT 4 to make sure that SP 6 or above is installed. In section [WinNT4] change the value of ServicePack from its default of 768 for SP3 to:
ServicePack=1536
(Remark: 768 = 0x300, 1536 = 0x600)

You should also adjust the error message that is displayed if this requirement is not met. In directory [ProgramFilesFolder]\InstallShield\Developer\Support\ you'll find INI files with error messages for each language, e.g. 0x409.ini for English messages. Open the file with a text editor and change string entry 1150 to indicate that service pack 6 is required on Windows NT 4.

5. Suppress the reboot after installing MSI 2.0

This step is optional. With MSI 2.0 you can postpone a reboot that may be required after installing the runtime files until after your setup has finished. The internal details are described below. InstallShield Developer 7 has an option in release wizard to delay the MSI engine reboot. However in version 7.00 this option is not being written to the setup.ini file. To suppress the reboot you can manually add the following entry in the [Startup] section of setup.ini:

SuppressReboot=Y

If you apply this to the setup.ini template all your releases will suppress the Instmsi.exe reboot. Note that Microsoft suggests performing a reboot at the end of installation if it was suppressed during installation of the MSI engine. ISD 7.00 doesn't take care of this so you have to add a ScheduleReboot action yourself.

InstallShield - Windows Installer Edition 2.0

InstallShield - Windows Installer Edition 2.03 (IPWI) can be used to update the Windows Installer runtime files on Windows 2000, but requires that the setup.exe launcher be replaced with a special version. Note that suppressing the reboot after installing the MSI 2.0 runtime files is not supported by this Setup.exe.

Before you start with the modifications create backups of all affected files.

1. Update the Windows Installer redistributables

After you have downloaded the Instmsi.exe file for Windows NT/2000 and Windows 95/95/Me rename them to InstmsiW.exe and InstmsiA.exe respectively. Copy them to the redistributables folder that is normally located at [ProgramFilesFolder]\InstallShield\Professional - Windows Installer Edition\Redist\Language Independent\i386.

2. Replace the Setup.exe bootstrapper

Download the special Setup.exe from InstallShield knowledge base article Q105501. Copy it to the redistributables folder that is normally located at [ProgramFilesFolder]\InstallShield\Professional - Windows Installer Edition\Redist\Language Independent\i386.

Note that the new Setup.exe should not be used to distribute MSI 1.2, and cannot be used with previous versions of InstallShield for Windows Installer.

3. Update the MSI version number for setup.ini

To update the MsiVersion entry that gets written in the [Startup] section of setup.ini each time you build a release go to the following registry entry:
HKEY_LOCAL_MACHINE\Software\InstallShield\ISWI\2.0
and change the string entry named "Msi Version" to "2.0.2600.1".

4. Adjust the Service Pack requirement for Windows NT 4

You should adjust the error message that is displayed if a system requirement is not met when setup starts. Open file [ProgramFilesFolder]\InstallShield\Professional - Windows Installer Edition\Support\Setup.ini with a text editor. You'll see sections with error messages for each language, e.g. [0x409] for English messages. Change string entry 1150 to indicate that service pack 6 is required on Windows NT 4.

InstallShield Express 3.5

InstallShield Express 3.51 (and 3.52 for the German Edition) can update the Windows Installer runtime files on all operating systems (including Windows 2000), however as of this writing some modifications are required, as described below. The next maintenance pack is expected to include support for MSI 2.0 without modifications.

Before you start with the modifications create backups of all affected files.

1. Update the Windows Installer redistributables

After you have downloaded the Instmsi.exe file for Windows NT/2000 and Windows 95/95/Me rename them to InstmsiW.exe and InstmsiA.exe respectively. Copy them to the redistributables folder that is normally located at [ProgramFilesFolder]\InstallShield\InstallShield Express\Redist\Language Independent\i386.

2. Update the MSI version number for setup.ini

To update the MsiVersion entry that gets written in the [Startup] section of setup.ini each time you build a release go to the following registry entry:
HKEY_LOCAL_MACHINE\Software\InstallShield\Express\3.5
and change the string entry named "Msi Version" to "2.0.2600.1".

3. Enable MSI update on Windows 2000

Update the template for setup.ini which is typically found at [ProgramFilesFolder]\InstallShield\InstallShield Express\Support\Setup.ini by adding the following section:

[Win2K]
MajorVer=5
MinorVer=0
BuildNo=2195
PlatformId=2

In the same file in section [SupportOS] add the line:
Win2K=1

4. Adjust the Service Pack requirement for Windows NT 4

Another required update to the Setup.ini template is to change the service pack number for Windows NT 4 to make sure that SP 6 or above is installed. In section [WinNT4] change the value of ServicePack from its default of 768 for SP3 to:
ServicePack=1536
(Remark: 768 = 0x300, 1536 = 0x600)

You should also adjust the error message that is displayed if this requirement is not met. In directory [ProgramFilesFolder]\InstallShield\InstallShield Express\Support\ you'll find INI files with error messages for each language, e.g. 0x409.ini for English messages. Open the file with a text editor and change string entry 1150 to indicate that service pack 6 is required on Windows NT 4.

5. Suppress the reboot after installing MSI 2.0

This step is optional. With MSI 2.0 you can postpone a reboot that may be required after installing the runtime files until after your setup has finished. The internal details are described below. InstallShield Express 3.51 has an option in the release properties called "Suppress MSI Engine Reboot" that you simply set to "Yes". Note that Microsoft suggests performing a reboot at the end of installation if it was suppressed during installation of the MSI engine. ISX 3.51 doesn't take care of this so you should add "Schedule Reboot at End" from the Custom Action Gallery.

InstallShield Express 3.0

InstallShield Express does not officially support updating the Windows Installer engine on Windows 2000. However Express 3.0 is internally somewhat similar to InstallShield - Windows Installer Editon 2.0, and users have reported that the method described above for InstallShield - Windows Installer Edition 2.0 also works for InstallShield Express 3.0, including the special Setup.exe from the knowledge base article.

Other Tools

If you are using a non Windows Installer based product like InstallShield Professional (Standard Edition) but need to install or update the MSI engine because you want to run a Windows Installer based setup as child install, you can use the following hints.

Detecting and updating the Windows Installer version

To detect the version of Windows Installer currently present on the machine you can check the version information of Msi.dll in the system directory (WINSYSDIR). To update Windows Installer run InstmsiW.exe on Windows NT/2000 or InstmsiA.exe on Windows 95/98/ME.

Suppressing the reboot after running Instmsi.exe

In the past in many cases it was required to reboot the computer after installing or updating the Windows Installer runtime files, before the actual setup could be launched. The reason is that the operating system has msi.dll running in memory so the Windows Installer files are not replaced until after the reboot. This usually is the case on systems with a shell version that includes the Windows desktop update, like Windows 98 and 2000, and Systems with IE4.01 SP1. For more information about this see Microsoft Knowledge Base article Q262974.

With Windows Installer 2.0 you can avoid this additional reboot. It has a command line option to suppress the reboot, and you can load and use the new version of msiexec.exe from the directory it has been installed to. To make this work the program launching Instmsi.exe must be aware of this and tell the main setup to reboot at the end if a required Instmsi reboot has been suppressed.

Here are the steps that are required by the setup launcher to suppress the Instmsi reboot:

  1. Run Instmsi.exe with one of the following command line parameters:
      instmsi.exe /c:"msiinst.exe /delayreboot"
      instmsi.exe /c:"msiinst.exe /delayrebootq"
    Both will suppress the reboot prompt, the second will perform a completely silent installation of Windows Installer 2.0.
  2. Instmsi.exe will return ERROR_SUCCESS (0) if no reboot is required, or ERROR_SUCCESS_REBOOT_REQUIRED (3010) if a reboot is required but was suppressed. The bootstrapper must catch these return values and act accordingly, e.g. pass REBOOT=Force to the msi package if ERROR_SUCCESS_REBOOT_REQUIRED was returned. This will cause the setup to request a reboot at the end of installation.
  3. Get the location of the newly installed Windows Installer runtime files. This directory is stored in a string value called InstallerLocation in registry key HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer.
  4. Change the current working directory to the location obtained in step 3 and launch Msiexec.exe from there. This way your setup will use the new runtime version even without a reboot. If the parent install calls the MsiInstallProduct API instead of running Msiexec.exe, it must load Msi.dll from the directory obtained in step 3.

About the Author

Stefan Krueger is working as freelance setup consultant, offering support, custom programming and workshops independently from InstallShield Software Corporation. Besides his contract work, he answers questions in various newsgroups and maintains the InstallSite.org web site, a place where setup developers share resources and information among peers.

If you have any comments about this article, or want to suggest a topic that Stefan should discuss in a future article, please write to E-Mail. To read Stefan's articles from previous issues of the InstallShield Newsletter, please visit http://www.installsite.org/isnews.htm.

More Windows Installer articles

 

 

 

English News Discussions Windows Installer Related Tools More Help InstallScript About InstallSite Shop Site Search
deutsch Neuigkeiten Diskussionsgruppen Windows Installer MSI FAQ Artikel     Shop Suche

Copyright © by InstallSite Stefan Krueger. All rights reserved. Legal information.
Impressum/Imprint Datenschutzerklärung/Privacy Policy
By using this site you agree to the license agreement. Webmaster contact