Trouble installing other products after Visual Studio

Customers have commented that whenever they try to install other products or patches they continually see the following message,

Another installation is in progress. You must complete that installation before continuing this one.

Customers may also see instances of msiexec.exe or msiexec.exe*32 appear continuously in Task Manager or other process monitoring software.

This may occur after installing either Visual Studio 2008 or Visual Studio 2010 Beta 1. If you look in your Application event log as described below, for the MsiInstaller source you may see a message like either of the following,

Detection of product ‘{AA4A4B2C-0465-3CF8-BA76-27A027D8ACAB}’, feature ‘VSTA_IDE_12590_x86_enu’, component ‘{FF4A39EF-8F8B-4557-9F81-50DC44C6D30A}’ failed.  The resource ‘c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\en\’ does not exist.

Or,

Detection of product ‘{874D5E2B-AACE-303A-B3EC-2563E071473E}’, feature ‘VS_IDE_657_x86_enu’, component ‘{A5854250-7B92-4A50-935F-6A486589F87D}’ failed.  The resource ‘d:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\en\’ does not exist.

In either case, some of the quoted values may be different but the path may still reference “Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\en”.

How to work around this issue

To determine if the issue affecting you is the one described here, you must start the event viewer. This is also necessary to identify the missing resource, if any, that needs to be created.

  1. Click on Start
  2. Click on Run
  3. Type “eventvwr” (without quotes) and click OK. If you are prompted to elevated on Vista or newer, click Continue.
  4. Expand Windows Logs and click Application
  5. Find the recent warning where the Source is MsiInstaller. In Vista and newer,
    1. Click Filter Current Log… in the right action pane
    2. Check Warning
    3. Type “MsiInstaller” (without quotes) in the Event sources edit control
    4. Type “1004” (without quotes) in the event IDs edit control
    5. Click OK

I’ve also attached an event viewer filter you can unzip and import as a custom view.

You should see a message similar to those above, stating stating that a directory like “C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\en\” does not exist. If you do not find such a message, you might search for event ID 1001 as logged during a similar event.

To work around this particular issue, simply create the directory that is missing.

Description of the issue

This is another example of the potential problems when advertising Windows Installer features. When COM registration is advertised, serialized data identifying the product feature that provides the COM server is written to the registry. When the class loader reads this value in this format that identifies a Windows Installer product feature, Windows Installer is queried for the component path which starts a resiliency check against the feature.

Because in this case a directory is missing for a component, Windows Installer logs an event and begins a maintenance installation to repair affected features. If you cancel this repair operation the issue will continue to surface. If allowed to continue, you might be prompted for source. However, unlike another example of a similar event, repairing the product will not resolve the issue.

As described for ICE18, a component that does not have a key path set must declare a related entry in the CreateFolder table. Of course, a versioned file is always preferred as a key path for a component if available, but an unversioned file or registry value will suffice.

So because the component referenced in the event log does not declare a key path nor create the “en” sub-directory, a repair triggered by a resiliency check will always be performed. And because only one Windows Installer transaction can run at a time, other Windows Installer installations are blocked.

Filter.zip