How to disable Installer self-repair for particular product


How to disable Installer self-repair for particular product

Sometimes Installer’s auto-repairing the product becomes anti-productive, and the question “how to disable self-repair for one particular product” can be often seen in various forums.

Here’s how.

Self-repair is triggered by the additional information in the registry, specified along with the ProgID. While the default value says how to call the program, the extra information relates to the Installer’s data about the installed product. This extra information is called Darwin descriptor (named by the original name of Windows Installer – Darwin), and looks like noise in regedit, however with remains of the “original” value. Here’s an example:

Figure 1

So, whenever the user is about to Open Word document, Windows will notice this Darwin descriptor and will check if the component it refers to is intact. The name of the feature the component belongs to can be recognized in the “noise”, in this case it’s WORDFiles. Checking if component is intact boils down to checking whether the so called key of the component is the same as it was in the installation. The key may be either file, or registry value. If the file has changed or was removed, or registry value is not found, self-repair will be triggered.

Which means that if we want to avoid repairing this particular component, all we have to do is to remove the Darwin descriptor.

The most difficult part is finding the registry key in question. This search should start from the entry with EventID 1004 in the event log about the missing component that triggered the self-repair. The entry will mention what actually was missing. That’s what needs to be looked for in the registry. Continuing with our example, if we rename winword.exe and then try to open Word file, the following entry will show up in our event log:

Detection of product '{90280409-6000-11D3-8CFE-0050048383C9}', feature 'WORDFiles', component '{8E46FEFA-D973-6294-B305-E968CEDFFCB9}' failed.  The resource 'C:\Program Files\Microsoft Office\Office10\WINWORD.EXE' does not exist.

followed by similar entry with EventID 1001, and then self-repair will be triggered. If for whatever reason we were trying to disable self-repair of Word file association, we would have to find in the registry the above key where winword.exe is mentioned, and remove Darwin descriptor.

Since advertising information is often centered on file associations, there’s also another, less involved way. If we open file association in question in Folder Options / File Types, and simply resave it, Darwin descriptor, of any, will be removed from the extension.

Once Darwin descriptor is removed, Windows won’t have any reason to check integrity of the product with Installer, so self-repair won’t be triggered.

Of course, one must have good reason to do the above procedure, since it naturally decreases resilience of the product installation. But software developers (or maybe installation builders) often do give enough of these good reasons. The #1 example that comes to mind is installation of Automate from Network Associates, where self-repair is triggered by mere removing their application from Startup folder.




This site was last updated 12/31/12