Visual Studio Setup

Installation and containerization of the Visual Studio family of products

AppCompat in Windows Installer

The Application Compatibility (AppCompat) platform in Windows is a powerful feature that allows for fixes on practically any program or package to be loaded on Windows. Windows Installer takes advantage of a protected database full of fixes in the form of transforms and custom action shims.While looking in a verbose Windows Installer log, you ...

ResolveSource Requires Source

It might be tempting to schedule the ResolveSource action, but ResolveSource actually requires that the original installation source is available whenever it is called. If your installer package is authored correctly, source must only be resolve in cases where the original RTM files are missing or during some patch uninstall scenarios. To ...

EXE Custom Actions are Bad

Windows Installer custom actions that launch executables (base custom action type msidbCustomActionTypeExe, 0x2) are typically bad and should be avoided. How are they bad? Let the Windows Installer team count the ways.During internal audits we question any EXE custom actions (CAs) but inevitably some make it into the product. Typically these ...

Column Types Cannot be Changed in a Patch or Transform

Transforms can change just about anything in an installation package - even the code page. Transforms can also add and drop both tables and columns but they cannot, however, change the column type. This is true for patches as well, since a patch package contains transforms.At their core, transforms store data aligned to the size of the data ...

Custom Action Guidelines

Rob Mensching, father of Windows Installer XML (WiX), blogs about why managed custom actions are a bad idea. Aaron Stebner follows up by saying (and has said before): How do you know what's natively supported? Those who know me already know what I'm going to say: read the docs. The Windows Installer SDK has some information if you look for it...

Rebuilding the Installer Cache

During some operations upgrades internally, a problem arose on some machines where a patch for the Microsoft .NET Framework 2.0 would fail to install. I was looped into the thread to diagnose the issue and found that the Windows Installer package and the patch package were both missing from the installer cache. Since a .msp file is just a ...

Determine if the Custom Action Function is Exported

Another reason a custom action may not run is because the custom action function isn't exported. This may not be common in most patch build systems, but could arise during authoring or if a binary wasn't updated in the Binary table. You should expect to find a log line similar to the following.MSI (s) (1C:C4) [16:57:23:258]: Doing action: ...

Cumulative Service Packs with MinorUpdateTargetRTM

Microsoft has had a long-standing policy of providing cumulative service packs - service packs that can be installed for a product whether a previous service pack for that product has been installed or not. Prior to the release of Windows Installer 3.1, minor upgrades which typically serve as service packs had to contain a pair of transforms...

Determine Which Files are Being Patched

Installing a patch will often mean that files are to be updated, though patching isn't limited or even required to just patch files. Starting with Windows Installer 3.0 you can find the final sequence of patches to be installed or reinstalled in a verbose log file similar to the following:MSI (c) (8C:C4) [14:27:53:319]: Final Patch Application...