Can we instruct Visual Studio Setup to keep existing files for re-install?

essamSALAH picture essamSALAH · Jun 22, 2009 · Viewed 10.3k times · Source

I have a Windows Forms application with an installer (.msi) already created with Visual Studio. I am now creating a new installer for version 2.0 with the property RemovePreviousVersions set to true.

Now, when I install 2.0 over 1.0 it removes 1.0 and installs 2.0 completely.

Is there a way that I can tell the installer if you find some files already installed (like .xml files used for data) then don't override them?

I am trying to have my 2.0 installer serve the 2 purposes:

  • Install from scratch for new users
  • Existing users will upgrade but not lose their customizations

Answer

Rado picture Rado · Jun 23, 2009

The deployment project in VS does not overwrite files. What happens is that since you have RemovePreviousVersions set to true, when you change your program file version and the ProductCode GUID of the setup project, it will first uninstall the previous version and then will do a clean install of the new version.

To make sure some files don't get overwritten, I usually exclude them from the Content or Primary output files (wherever they are located) and then add them separately to the setup project. Doing this, you can individually set properties for those files. The property you are looking for is called Permanent" that if set to true will never uninstall the file in question, and therefore will never overwrite it with a new version. The only drawback with this is that when you uninstall the product, the Permanent files will not get removed from their target locations, but in my case (usually local DB files), that's a good thing ;)

Cheers!

[edit] The above is true for VS 2008 SP1. Haven't tried it on other versions, so hopefully you are using the same VS version or it works for the version you use.

[edit2] Oh, also you could also use the "Condition" property to achieve something similar. If you do that, make sure that "Transitive" is set to True so the Condition is always evaluated. Haven't tried it with Conditions, but that's another option you could look at. Other than these 2, I think that's pretty much it for VS deployment projects.