0
votes

I have an MSI package I maintain with Installshield 2012 Pro.

The package was created a few years again and requires periodic maintenance as new versions of the application is installs are released by our development team. This MSI has been used in many locations, on many machines without issue.

At one customer location, they've install about 20 copies of the application on 20 machines. Each machine is built exactly the same. Periodically, for an unknown reason registry entries relating to that application go missing. Not all of them, a select one or two... the same entries always go missing.

We so far have failed to track the exact root cause, however one of our support engineers noticed the MSI repair dialogue appearing when they opened the application shortcut. Following this, the registry entries went missing.

On each instance of the registry entries going missing we have removed the MSI from the c:\Windows\Installer directory. On machines we've made this change too, the registry changes so far have not disappeared again.

This leads me to think the MSI is somehow removing the selected registry entries during the repair, but I don't understand how.

  • There are at least 50 registry entries under the same key as the entries that get removed. (these are created by the application not the installer)
  • The MSI package doesn't insert any keys at all during install
  • There are no custom actions at all
  • I only have one key file set in the whole MSI, and this is for a component installed in Windows\system32
  • None of the shortcuts are 'Advertised'

There appears to be a clear link between removing the MSI from the Installer directory and no further occurrences, but I fail to see what in my MSI could cause specific registry keys to disappear.

I realize the exact reason this this is subjective to my MSI or the customers systems, so as generally as possible I ask:

  • Why would Windows launch the MSI repair function, considering the above
  • Can an MSI alter the registry, considering the above
  • Is there anyway post installation of an MSI to disable the auto repair function for this MSI?
  • How should I alter the MSI to ensure auto repair doesn't occur?

Thanks

1
When you say go "missing" do the registry values and keys get deleted or does the data of the registry value get set to null / empty?Christopher Painter
@ChristopherPainter the values get deleted, the keys themselves remain.Damo
I need to be sure we are using the same terminology. If you have a value SOMEVALUE that is of type RegSZ with data SOMEDATA ... does SOMEDATA become NULL or does SOMEVALUE actually get removed completely?Christopher Painter
Sorry. SOMEDATA is empty / NULL, SOMEVALUE remains in the registry.Damo
Are you using a [PROPERTY] in the registry table for setting SOMEDATA with SOMEVALUE?Christopher Painter

1 Answers

0
votes

Start by proving whether the auto repair is related to your product. Check the application event logs for the component id that caused Windows Installer to kick off the auto repair. Then, if it's part of your installer, figure out why.

It seems unlikely that your MSI would alter the registry. Although you do not specifically say there are no RemoveRegistry table entries, it's hard to imagine any snuck in accidentally.

There are only bad ways to disable auto repair (some global, some involving not registering your installer). Avoid them.

First figure out what's wrong. Then figure out how to fix it. For instance if in step 1 you determine the component triggering auto repair is part of your install, perhaps set the logging policy on a machine where this occurs so you can get a verbose MSI log.