Monday, November 17, 2008

Investigating self-repair

Investigating self-repair

Another common question is, “Why does Windows Installer run every time I restart my system/start my application?”

This behavior is part of the resiliency or self-repair feature of Windows Installer. (This question has been answered many times in many places, but not with pictures.) When MSI fails to find a resource it needs, it displays a configuration dialog box similar to the following:

MSI self-repair progress bar

To see details about the missing resource, open the Event Viewer (Control Panel > Administrative Tools); the details are in the Application section.

Event Viewer

The details of the repair are the MsiInstaller entries in the Application section of the event viewer.

events in Application section

Double-clicking the warning event reveals the event properties; the details of the event list the product code, feature name, and component code involved, as well as the missing resource.

event details

(A previous tip hinted at how to get more information about a product or component, given its GUID.)

I’m not aware of a way to disable self-repair, short of disabling advertised shortcuts, extracted COM information, Extension-table file associations, etc.

A follow-up question is how to log self-repair operations, since there’s not an explicit msiexec command to which you can add the /L switch. One uninviting method is to set the system-wide Logging policy, which creates a debug log in the Temp folder for each MSI operation. A somewhat less uninviting option is to set the system-wide Debug policy (to 7), and then use DebugView from Sysinternals to view the “live” debug log.

DebugView MSI logging

No comments: