Visual Studio Setup
Installation and containerization of the Visual Studio family of products
Latest posts
Why is Mscoree.lib So Old?
Some people have noticed that mscoree.lib in the Program FilesMicrosoft Visual Studio 2005VCPlatfromSDKLib directory is older than the release date for .NET 2.0. If you run dumpbin.exe on the two libraries you'll see vastly different time stamps:> dumpbin.exe /headers "Program FilesMicrosoft Visual Studio 8VCPlatfromSDKLibmscoree.lib"Dump of file C:Program FilesMicrosoft Visual Studio 8VCPlatformSDKlibmscoree.libFile Type: LIBRARYFILE HEADER VALUES 14C machine (x86) &nbs...
Where's Msi.lib?
If you're developing custom actions for Windows Installer or a bootstrapper in Visual Studio 2005, or utilizing the resiliency and install-on-demand features of Windows Installer in your product developed in Visual Studio 2005, you might get link errors for Windows Installer functions. Msi.lib was not included for x86 in the Platform SDK lib directory if you installed Visual C++. It is present for x64 in the AMD64 sub-directory and the IA64 sub-directory, however. See Visual Studio 2005 Product Line Overview for what editions are affected.In order to get msi.lib for x86 you need to install at least the Windows...
Diagnosing Installation Errors
When problems occur when installing, repairing or patching, or uninstalling a product using Windows Installer technology, you need to be able to figure out what happened and why it happened. Dialogs that occur when the user interface is displayed can be helpful sometimes, but many times you need to look at a log to determine the exact cause of the problem.The first step in diagnosing a problem using the log is to, of course, enable logging. When performing any actions with an installation package or patch always be sure to pass on the command line. This enables verbose logging. You can also use which outputs de...
InstallSite.org
Looking through my referrals for common queries that lead people to my blogs, I noticed several recently from http://www.installsite.org/ and was pleased to see this blog listed in Stefan's related blogs. InstallSite.org has been run by Stefan Krueger for many years, dating back to when Windows Installer 1.0 was released when I happened across the site and even posted several merge modules, some of which you can still find at http://www.installsite.org/pages/en/msi/msm.htm.Stefan is a Microsoft MVP for Windows Installer technology and has run a very great web site full of information. If you are writing inst...
Resolving Prompts for Source
When discussing the Windows Installer cache, I mentioned how cabinet streams are stripped from the .msi file when the Windows Installer package is cached, and how this is a contributing factor to prompts for source. A prompt for source will occur when repairing or patching a product if the source for a file to reinstalled is not present. This results in the Windows Installer error 1706 to be displayed if installing with a user interface and in the log, and the Windows error 1603 () to be returned from the process.Prior to Windows Installer 2.0 the original installation source was always necessary but that was fix...
Windows Installer Cache
Windows Installer packages may contain streams identified in the Media table if the Cabinet column value begins with the number sign #, as documented for the Cabinet data type. This cabinet is embedded as a stream within the .msi file and contains files referenced in the File table using their File key column value. When packages are installed, however, cabinet streams are stripped from the .msi file and the .msi file is copied to %WINDIR%\Installer. This saves a significant amount of space required for large packages that are installed on the machine; however, this is part of the reason for prompts for source wh...
Blog Customizations, Part 3: OO JavaScript
Not satisfied by the search feature provided by Community Server I've again created some helpful JavaScript classes this time using object-oriented JavaScript to define a basic search provider and to subclass that for specialized providers like MSN Search. I defined several private properties and several privileged methods that can access those private properties, unlike public methods in classical object-oriented languages. Thanks to closures those methods can access those private properties — defined as local variables — even after the constructor function has returned. To define a subclass we use t...
Shell Extensions for .NET Assemblies, Version 1.4.1993
Some time back I made modifications to the previous version of my shell extensions for .NET assemblies to display differences in the column handler for both native and managed binaries targeting the x86, IA64, and x64 platform architectures. Now that the Microsoft .NET Framework 2.0 has released, I've updated my public drops. In a future version I'll be updating the dispatch interface to return a of type rather than since JScript and VBScript only support an array of , and will add support for localization.
Waiting for msiexec.exe to Finish
Since Windows Installer 1.0 was first released, msiexec.exe has always run in the Windows subsystem. That means that when it is executed from the console or by a batch script control returns to the console or script immediately. If you depend upon the variable being set accordingly it won't be. In this scenario I like to use from the command line or a batch script. This will create the process and wait for it to exit, and the return code from the process is passed through and returned from the start command such that is set accordingly. Just type before the command line you'd normally pass to msiexec.exe like...