Visual Studio Setup

Installation and containerization of the Visual Studio family of products

Controlling how MsiPatchSequence is Generated

When running on Windows Installer 3.0 and newer, the MsiPatchSequence table dictates how patches apply to a target product install. When using PatchWiz.dll, you can allow this table to be automatically generated, fill it with data yourself, or even prevent it from being generated if you want Windows Installer 2.0 behavior. This means that ...

Don't Install from a Drive Substitution

If you're not familiar with the subst.exe application, it allows you to create DOS devices for a given path using the DefineDosDevice API. Note in the API remarks the following:Windows Server 2003 and Windows XP: The function creates a device name for a caller that is not running in the LocalSystem context in its own Local MS-DOS device ...

How Patching Works

Previously I blogged about what is in a patch, but how do patches work? To put it imply, patches transform a view of the product or products that the patch targets.Patches (.msp files) contain a set of transforms: one transform changes the target product into the upgraded product, and one transform adds information specific to the patch. This ...

Updated Sample MSI Scripts

Yesterday I blogged about what a patch file (.msp file) contains, as well as most other Windows Installer files. You might find, however, that some of the sample Windows Installer scripts in the Samples\SysMgmt\Msi\Scripts don't work with patch files. The reason is because you must pass msiOpenDatabaseModePatchFile (32) to the Installer....

What's in a Patch

Windows Installer relies on structured storage for information about the installation package and to store data used by the installation such as any Binary types and cabinet files. Patches (.msp files) are no different in structure but will contain different data. Up until Windows Installer 3.0, patches themselves didn't contain any standard ...

Handling GAC and NGEN Operations after Reboot

Some people have noticed a general slow-down after restarting their computers after installing a .NET Framework 1.0 or 1.1, or a Visual Studio .NET 2002 or 2003 patch. This is due to a change in how post-reboot operations are handled that are sometimes necessary after installing a patch.Windows Installer automatically schedules files for ...

Supporting our Lifecycle Policy with ARPSYSTEMCOMPONENT

To conclude the series of the problems with ARPSYSTEMCOMPONENT, we will extend the workaround to support setting ARPSYSTEMCOMPONENT=1 to support Microsoft's lifecycle policy on support N and N-1, where N would be a service pack, and N-1 would be the previous service pack or the RTM.Since we've essentially already developed our own sequencing ...

Working with ARPSYSTEMCOMPONENT

Continuing the series on the perils and necessity of ARPSYSTEMCOMPONENT, it's time to explain one solution for having your cake an eating it too.If you have determined that you need to define ARPSYSTEMCOMPONENT=1 in your product RTM, remember that your product nor patches will not show up in the Add/Remove Programs (ARP) control panel unless ...

Major Upgrade Patches

A question was asked in Aaron Stebner's blog about major upgrades via MSP patch files with sequencing information. I would like to take this opportunity — at Aaron's request — to explain a few guidelines regarding major upgrades in Windows Installer.Basically, a major upgrade is an update to a product that changes all of the ...

A Reason for ARPSYSTEMCOMPONENT

Last week I blogged about how ARPSYSTEMCOMPONENT is dangerous, but there are reasons for using it. Two reasons ARPSYSTEMCOMPONENT is defined in the product MSIs for the .NET Framework 2.0 and Visual Studio 2005 is to localize the Add/Remove Programs (ARP) entries, and to change certain registry values so that the external UI handler is invoked...