A Visual Studio Installer project has two properties that control the content of the Upgrade table contained in the generated MSI file. They are -
You can generate an MSI that does not check for newer versions by setting DetectNewerInstalledVersion to "False". Consequently, the Upgrade table will not include an entry for that test.
In my test to create an MSI that will downgrade from 2.0 to 1.0 I created an MSI for the 1.0 version that set DetectNewerInstalledVersion to "False" and RemovePreviousVersions to "True". Then I used Orca to edit the Upgrade Table so that it appeared as follows -
Testing with the generated MSI demonstrated that the 2.0 version of the executable remained in the application folder after downgrade. Other unversioned items were properly downgraded.
To work around Windows not replacing a 2.0 version with a 1.0 version of a versioned binary it was necessary to add an additional property to the Property table. The property was REINSTALLMODE and the value was "amus" as seen below.
These edits allowed a successful downgrade from 2.0 to 1.0.
Consider carefully and test thoroughly the effect of the REINSTALLMODE edit. Depending on what your MSI does It has the potential of replacing deployed content with older versions even though you may not intend for that to happen. Refer to REINSTALLMODE property and also to this MSDN blog post Aaron Stebner's WebLog.