Visual Studio Setup

Installation and containerization of the Visual Studio family of products

Run ICE Validation and Fix Errors

Windows Installer is a powerful yet complex technology. There are a lot of rules that have to be followed to be able to successfully install, maintain, and uninstall your product and to retain the functionality and tidy clean-up capabilities of Windows Installer. To this end, Internal Consistency Evaluators (ICEs) exist to aid in validating ...

File Sequencing and How Files are Located

The File table in a Windows Installer package has a Sequence column that begins with 1. Besides determining in what order files are to be installed, this column serves another, relatively more important function: determining where the source files are located.In concert with the Media table, a range of sequence numbers identify in which ...

Calculating Required Space for Installation

Installing a Windows Installer product package requires a certain amount of space on disk, even if all the installation is doing is running a custom action. Besides file costing and other actions typically sandwiched between the CostInitialize and CostFinalize standard actions, Windows Installer will require space under %WINDIR%Installer to ...

Avoid Overwriting Files in Administrative Installations

Last June before the Microsoft .NET Framework 2.0 shipped, I discussed how during administrative installations some 64-bit files overwrote some 32-bit files and I provided a transform to fix the issue. I filed a bug and the issue was fixed before .NET 2.0 shipped. Later in the release cycle the Office Crash Reporting Tool, otherwise known as ...

Patch Files Extractor

Previously I discussed conceptually how to extract files from a patch, mentioning that the transforms contained within patches are stored as sub-storages and the cabinets that contain the files are stored as sub-streams. I've had a tool for a while that extracts the transforms and cabinets from a .msp file and wanted to share the slightly ...

Opening Patch Files when Compiled for Unicode

If you want to open a .msp file with the Windows Installer APIs, you must pass to the function, or (110) is returned. Below is the definition of both and from msiquery.h in the Windows Installer SDK.#define MSIDBOPEN_READONLY (LPCTSTR)0#define MSIDBOPEN_PATCHFILE 32/sizeof(*MSIDBOPEN_READONLY) is defined as when is defined, which is ...

Specifying the Code Page for Patch Tables

Code pages describe a character set. In MSI Databases and Code Pages I described how Windows Installer databases use a code page for the string pool, as well that the summary information stream uses its own code page in (1) to describe strings in the summary information stream. There is a bug, however, when creating a .msp patch database from...

Identifying Administrative Installation Patches

Windows Installer has the ability to create administrative installations, which is a copy of the .msi database and files that have been expanded into a source directory structure. These administrative installations can easily be deployed using Active Directory group policy deployment among other things, such as creating patches since ...

Formatting Properties

A frequently asked question is about why property values in the Property table aren't formatted when the values contain properties themselves, such as:[ProductName] is copyright by [Manufacturer].The reason these property values aren't formatted is because the Value column type is simply Text, not Formatted. Other formattable column types ...