Beginning with Windows Installer 3.0 you can install multiple patches at once, i.e. in a single install transaction. To do this you pass a semicolon-delimited list of fully-qualified paths to patches to the PATCH property. Windows Installer 2.0-style patches are sequenced first in the ordered specified, but then 3.0-style patches are sequenced according to information in each of their MsiPatchSequence tables and superseded accordingly, as documented in How Patches Work.

This can save a lot of time for many products. The Microsoft .NET Framework 2.0, for example, synchronously generates native images for many assemblies it installs. This can require a lot of time during the initial installation of the .NET Framework 2.0 as well as when patching the Framework. Because patching a feature requires that the feature is installed local and because several actions are conditioned not to run when the PATCH property is defined — along with other patch-specific properties — the Framework must still be installed first before you can patch it.

Download the appropriate redistributable for the processor architecture of the machines on which the .NET Framework 2.0 will be deployed:

Install the Framework by double-clicking the executable. Network administrators may wish to extract the Windows Installer .msi file by running the following command:

dotnetfx.exe /c /t:"<target path>"

To deploy the Windows Installer .msi package you must pass USING_EXUIH=1 as a property to the command line. Once the Framework is installed you can configure it and PATCH it with multiple patches at once if you have Windows Installer 3.1 installed on supported platforms.

msiexec.exe /i {7131646D-CD3C-40F4-97B9-CD9E4E6262EF} /l*v netfx.log PATCH="\\appserver\patches\NDP20-KB123456-X86.msp;\\appserver\patches\NDP20-KB789012-X86.msp"

Windows Installer 3.0 may be suitable for some other applications' patches, but patches for the .NET Framework 2.0 and Visual Studio 2005 do require Windows Installer 3.1.