Issue #25165: Windows uninstallation should not remove launcher if other versions remain
diff --git a/Tools/msi/launcher/launcher.wixproj b/Tools/msi/launcher/launcher.wixproj
index 73f26a8..a0f1d57 100644
--- a/Tools/msi/launcher/launcher.wixproj
+++ b/Tools/msi/launcher/launcher.wixproj
@@ -5,6 +5,7 @@
         <SchemaVersion>2.0</SchemaVersion>
         <OutputName>launcher</OutputName>
         <OutputType>Package</OutputType>
+        <DefineConstants>SkipMissingCore=1;$(DefineConstants)</DefineConstants>
     </PropertyGroup>
     <Import Project="..\msi.props" />
     <ItemGroup>
diff --git a/Tools/msi/launcher/launcher.wxs b/Tools/msi/launcher/launcher.wxs
index b20cff8..718b666 100644
--- a/Tools/msi/launcher/launcher.wxs
+++ b/Tools/msi/launcher/launcher.wxs
@@ -26,6 +26,13 @@
         <InstallExecuteSequence>
             <Custom Before="SetLauncherInstallDirectoryLM" Action="SetLauncherInstallDirectoryCU">NOT Installed AND NOT ALLUSERS=1</Custom>
             <Custom Before="CostFinalize" Action="SetLauncherInstallDirectoryLM">NOT Installed AND ALLUSERS=1</Custom>
+
+            <RemoveExistingProducts After="InstallInitialize">UPGRADE or REMOVE_OLD_LAUNCHER</RemoveExistingProducts>
         </InstallExecuteSequence>
+        
+        <!-- Python 3.5.0 shipped with an incorrect UpgradeCode -->
+        <Upgrade Id="A71530B9-E89D-53DB-9C2D-C6D7551876D8">
+            <UpgradeVersion Maximum="$(var.Version)" Property="REMOVE_OLD_LAUNCHER" />
+        </Upgrade>
     </Product>
 </Wix>