Visual Studio Setup

Installation and containerization of the Visual Studio family of products

You Can’t Escape Quotes

SQL expression support is easy to use when modifying Windows Installer packages, but there is one major drawback that continues to cause problems: you can't escape single quotation marks in Windows Installer SQL expressions. Consider the following sample code: TCHAR szSQL[MAX_SQL];LPCTSTR pszExample = TEXT("Heath 'ClubStew' Stewart");...

Microsoft .NET Framework 3.0 Released

Yesterday, the Microsoft .NET 3.0 Framework was released. This is comprised of the .NET Framework 2.0 plus Windows Workflow Foundation, Windows Presentation Foundation, and the Windows Communication Foundation. This release is intended to increase the scope of the original base class library, so while the 2.0 BCL is included this whole release...

Digital Signatures in Windows Installer

Digitally signing files helps protect against changes to a file (or any data, really) by validating that a hash of the current file matches the hash stored in the digital signature. Digital signatures also help verify that a package came from a particular publisher by encrypting the hash with the publisher's private key. Verifying the ...

Why a Custom Action May Not Run

When it appears that a custom action in your install package or patch isn't executing, you have to consider a couple of reasons. If the action has a condition in the Condition column of InstallUISequence table, the InstallExecuteSequence table, or any of the other sequence tables, the condition may have evaluated to False. In a verbose log ...

Find the Product

The Windows SDK Team instructs users how to uninstall older Platform SDK installations without the original source installation media. As part of their instructions, they write, RemoveProgram FilesMicrosoft SDK folder This is the painful part: Find all .msi that are releated to the February 2003 release in %windir%installer from the cmd ...

Deleting Bad Feed Items

I'm been using the Windows RSS Platform provided for down-level systems with Internet Explorer 7 for a while, but every so often a few blog posts from our MSDN aggregated feed contain markup or links that cause problems, such as absolute-positioned <DIV>s and image sources on servers requiring authentication. I can't just unsubscribe to...

Detecting Patches in .NET 2.0 and Visual Studio 2005

Aaron Stebner posted some sample code to detect whether the .NET Framework 1.0, 1.1, or 2.0 were installed and at what service pack level they are. Basically, the .NET Framework installation writes a common, version-specific registry key in the following location along with an SP level registry value. The sample below for an English (United ...

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 MSIDBOPEN_PATCHFILE to the MsiOpenDatabase function, or ERROR_OPEN_FAILED (110) is returned. Below is the definition of both MSIDBOPEN_PATCHFILE and MSIDBOPEN_READONLY from msiquery.h in the Windows Installer SDK.#define MSIDBOPEN_READONLY (LPCTSTR)0#define ...

Identifying Windows Installer File Types

I've been writing a number of helpful tools at work such as a tool to extract transforms and cabinets from a patch and wasn't satisfied relying on the file extension to identify a patch, or other Windows Installer file types for that matter. File extensions are only one way to help the shell to invoke actions on files, filter file types in ...

Feedback usabilla icon