Issue #23260: Update Windows installer
diff --git a/Tools/msi/bundle/bundle.wxs b/Tools/msi/bundle/bundle.wxs
new file mode 100644
index 0000000..4892ebb
--- /dev/null
+++ b/Tools/msi/bundle/bundle.wxs
@@ -0,0 +1,80 @@
+<?xml version="1.0"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
+     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
+  <Bundle Name="!(loc.FullProductName)"
+          UpgradeCode="$(var.UpgradeCode)"
+          Version="$(var.Version)"
+          IconSourceFile="bundle.ico"
+          Manufacturer="!(loc.Manufacturer)"
+          UpdateUrl="http://www.python.org/"
+          DisableModify="button"
+          Compressed="no">
+    <BootstrapperApplication Id="PythonBA" SourceFile="$(var.BootstrapApp)">
+        <Payload Compressed='yes' SourceFile='Default.thm' />
+        <Payload Compressed='yes' SourceFile='Default.wxl' />
+        <Payload Compressed='yes' SourceFile='SideBar.png' />
+    </BootstrapperApplication>
+
+    <!-- May be set to "Removing" or "Repairing" -->
+    <Variable Name="ActionLikeInstalling" Value="Installing" />
+    <!-- May be set to "Uninstallation" or "Repair" -->
+    <Variable Name="ActionLikeInstallation" Value="Setup" />
+
+    <Variable Name="ShortVersion" Value="$(var.MajorVersionNumber).$(var.MinorVersionNumber)" />
+    <Variable Name="ShortVersionNoDot" Value="$(var.MajorVersionNumber)$(var.MinorVersionNumber)" />
+
+    <Variable Name="InstallAllUsers" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="TargetDir" Value="" Persisted="yes" bal:Overridable="yes" />
+    <?if $(var.Platform)~="x64" ?>
+    <Variable Name="DefaultAllUsersTargetDir" Value="[ProgramFiles64Folder]Python [ShortVersion]" bal:Overridable="yes" />
+    <?else ?>
+    <Variable Name="DefaultAllUsersTargetDir" Value="[ProgramFilesFolder]Python [ShortVersion]" bal:Overridable="yes" />
+    <?endif ?>
+    <Variable Name="DefaultJustForMeTargetDir" Value="[LocalAppDataFolder]Programs\Python\Python[ShortVersionNoDot]$(var.Suffix32)" bal:Overridable="yes" />
+    
+    <!--
+    An empty string will use the other defaults based on InstallAllUsers
+    (and switch dynamically in the UI). To get the old default, pass
+    this property on the command line:
+        DefaultCustomTargetDir=[WindowsVolume]Python[ShortVersionNoDot]
+    -->
+    <Variable Name="DefaultCustomTargetDir" Value="" bal:Overridable="yes" />
+
+    <Variable Name="InstallAllUsersState" Value="enabled" />
+    <Variable Name="TargetDirState" Value="enabled" />
+    <Variable Name="CustomBrowseButtonState" Value="enabled" />
+
+    <Variable Name="Include_core" Value="1" Persisted="yes" />
+    <Variable Name="Include_exe" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_dev" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_lib" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_test" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_doc" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_tools" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_tcltk" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_pip" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_launcher" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_symbols" Value="0" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="Include_debug" Value="0" Persisted="yes" bal:Overridable="yes" />
+    
+    <Variable Name="AssociateFiles" Value="1" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="PrependPath" Value="0" Persisted="yes" bal:Overridable="yes" />
+    <Variable Name="CompileAll" Value="0" Persisted="yes" bal:Overridable="yes" />
+    
+    <Variable Name="SimpleInstall" Value="0" bal:Overridable="yes" />
+    
+    <Chain ParallelCache="yes">
+      <PackageGroupRef Id="crt" />
+      <PackageGroupRef Id="core" />
+      <PackageGroupRef Id="dev" />
+      <PackageGroupRef Id="exe" />
+      <PackageGroupRef Id="lib" />
+      <PackageGroupRef Id="test" />
+      <PackageGroupRef Id="doc" />
+      <PackageGroupRef Id="tools" />
+      <PackageGroupRef Id="tcltk" />
+      <PackageGroupRef Id="launcher" />
+      <PackageGroupRef Id="postinstall" />
+    </Chain>
+  </Bundle>
+</Wix>