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: 2002-01-28
Dieser Artikel in deutsch |
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
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 .NET Domain Controller | 501 | 2 | - | - |
Windows .NET Standard Server | 501 | 3 | - | - |
Windows .NET Enterprise Server | 501 | 3 | 1 | - |
Information about the Windows .NET 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:
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).
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.
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 | |
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.
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 .NET Server | - | - | - | * |
- not supported
+ can be installed or updated
* included, cannot be installed
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.
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.
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".
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
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.
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.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.
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.
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.
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".
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.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.
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.
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".
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
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.
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 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.
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.
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.
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:
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 . To read Stefan's articles from previous issues of the InstallShield Newsletter, please visit http://www.installsite.org/isnews.htm.
News | Discussions | Windows Installer | Related Tools | More Help | InstallScript | About InstallSite | Shop | Site Search | |
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