Visual Studio Setup
Installation and containerization of the Visual Studio family of products
Latest posts
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 common dialogs, and more.If you try to open an .msp file with the function you must pass the flag to the parameter or the function fails. Passing this flag for other Windows Installer file types also results in an error, and this function cannot be used to open .msi files. C...
Book Review: Customizing the Microsoft .NET Framework Common Language Runtime
As you might have noticed from various posts on my blog I love understanding how things work. When I started learning the Microsoft .NET Framework 1.0 I delved into intermediate language (IL) for most of the assemblies and learned about the hosting interfaces. If you have such a passion for learning how things work then Customizing the Microsoft .NET Framework Common Language Runtime from MS Press by Steven Pratschner is the book for you.Customizing the Microsoft .NET Framework Common Language Runtime delves into all the hosting interfaces and features of the .NET Framework 2.0. There's a lot of new control provi...
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 Order:MSI (c) (8C:C4) [14:27:53:319]: {3DB7C93B-AA16-49E8-9D9E-D427F2C5DDEB}MSI (c) (8C:C4) [14:27:53:319]: {685E109C-738F-4575-B1FA-CF645F3611F0} - Example.mspTransforms from all applicable patches will be resolved in that order. Read How Patching Works for more details.Bu...
Fast Searching in Public Folders
I respond to a lot of questions answered on an internal alias for Windows Installer support, some of which inspire posts on my blog. That alias is also archived in a public folder on our corporate Exchange server so there is a vast treasure trove of information for reading - far too much to use Outlook's built-in search.For those also in an environment where public folders exist in Exchange full of information, there are many ways to find information quickly. I prefer to use Windows Desktop Search. To set this up, follow these instructions: You can now force a rebuild of the index...
Extract Files from Patches
From the mailbag, someone asked how to extract files from a patch. Now presumably one would want to extract the files as they apply to a product if the patch were installed but I will cover both ways because one can lead to the other. If you're looking for the simplest and quickest way to extract files from a patch skip toward the end; otherwise, if you're interested in the structure of a .msp file and how to extract all files regardless of a particular product the patch targets read on.Recall from What's in a Patch that a .msp file contains sub-storages for pairs of transforms that transform the patch target pac...
Blog Customizations, Part 4: OpenSearch Discovery
I'm a big fan of extensibility, which is why I was excited to see in a recent blog post on the IE Blog about OpenSearch discovery using <link/> elements. OpenSearch is a collection of XML schemas and extensions to RSS that enables clients like Internet Explorer to interact with search results in order to discover, query, and parse search results in a standard way.Web sites can add new search providers using in Internet Explorer 7 Beta 2 Preview. I'm not naive enough to think anyone would want a permanent provider listing for my blog, but I have again customized this blog to add two <link/> eleme...
Common Controls in Windows Installer UI
Notice the differences between the following two dialogs from the same Windows Installer package on the same Windows XP machine.The first dialog is displayed when launching a sample .msi file using the msiwai.exe program I detailed before. The second dialog is displayed when the sample .msi file is launched from Windows Explorer, thus using the default handler, msiexec.exe. So why the difference?The difference between the two executable is that msiexec.exe has an embedded manifest to bind to the Common Controls 6 side-by-side native assembly, while my sample application msiwai.exe has no such manifest and, thus, ...
Differentiating 64-bit Editions of Windows XP and Windows Server 2003
Microsoft Windows provides a lot of base services on which applications can be written, but there are differences between all the various editions of Windows. While it's far more common to have a minimum dependency on a particular platform, cases may arise where an application may require, for example, Windows XP but won't run on Windows Server 2003. The recent release of Internet Explorer 7.0 Beta 2 Preview is one such example, requiring Windows XP SP2. While ultimately you should use the AppSearch table and related tables like the DrLocator table for finding directories and files, along with the Signature ta...
64-bit Managed Custom Actions with Visual Studio
A reader who happened across my post on Windows Installer on 64-bit Platforms mentioned a problem with running 64-bit managed custom actions using the Visual Studio 2005 Windows Installer project. This also recently cropped up in an internal discussion alias.The issue is that if you build a managed class library project targeting a 64-bit platform using or and install a Windows Installer package built in Visual Studio 2005 on a 64-bit machine a is thrown. The reason is because the native shim packaged with the .msi file is a 32-bit executable.Let's step back a minute, though, to how to build a Windows Install...