tags:

views:

168

answers:

1

I have a config file, myapp.exe.config, that I want to install only if it does not already exist. That is, I don't want to overwrite any existing config file. How can this be done in WiX?

(Ultimately I will have to do something more sophisticated with settings, having defaults and overrides and so on. But in the meantime I am just looking for a short-term fix.)

+3  A: 

What you describe is the default behavior if the file is the keypath of a component. For example, the following component will not install foo.config if that file already exists (or in the case of a versioned file, if a file with a equal or higher version number already exists):

<Component Id='fooConfigComponent' Guid='*'>
   <File Source='foo.config'/>
</Component>

Note that if you have multiple files in your component, then only one can be the "keypath". You can control this by setting the KeyPath attribute of the file to yes. But the recommended strategy is to have only one file per component, in which case the file automatically becomes the component keypath.

edit: note that this default behavior can be overridden with the REINSTALLMODE property. You may want to open your MSI with orca and see if this property is being set in the property table.

Wim Coenen
Thanks. It turns out that I have asked the wrong question. My installer has to be uninstalled before installing a new one. (The tutorial assures me that this is entirely normal for a minor upgrade.) The problem is that the config file is being deleted even if it has been modified by the user. I will have to investigate this.
dangph