Issue #23260: Update Windows installer
diff --git a/Tools/msi/bundle/bundle.targets b/Tools/msi/bundle/bundle.targets
new file mode 100644
index 0000000..2360f46
--- /dev/null
+++ b/Tools/msi/bundle/bundle.targets
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup>
+        <SchemaVersion>2.0</SchemaVersion>
+        <OutputType>Bundle</OutputType>
+        
+        <BootstrapConfiguration Condition="'$(BootstrapConfiguration)' == ''">Release</BootstrapConfiguration>
+        <LinkerSuppressSpecificWarnings>1132;1135;1140</LinkerSuppressSpecificWarnings>
+        <OutputName Condition="$(BuildForRelease)">$(OutputName)-$(PythonVersion)</OutputName>
+        <OutputName Condition="!$(BuildForRelease)">$(OutputName)-$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber).$(RevisionNumber)</OutputName>
+        <OutputName Condition="$(Platform) == 'x64'">$(OutputName)-amd64</OutputName>
+        <OutputName Condition="'$(OutputSuffix)' != ''">$(OutputName)-$(OutputSuffix)</OutputName>
+
+        <OutputPath>$(OutputPath)en-us\</OutputPath>
+        <OutDir>$(OutputPath)</OutDir>
+        
+        <DownloadUrl Condition="'$(DownloadUrl)' == '' and '$(DownloadUrlBase)' != ''">$(DownloadUrlBase.TrimEnd(`/`))/$(PythonVersion)/$(ArchName)/{2}</DownloadUrl>
+        <DefineConstants Condition="'$(DownloadUrl)' != ''">$(DefineConstants);DownloadUrl=$(DownloadUrl)</DefineConstants>
+        <DefineConstants Condition="'$(DownloadUrl)' == ''">$(DefineConstants);DownloadUrl={2}</DefineConstants>
+    </PropertyGroup>
+    
+    <ItemGroup>
+        <WixExtension Include="WixUtilExtension">
+            <HintPath>WixUtilExtension</HintPath>
+            <Name>WixUtilExtension</Name>
+        </WixExtension>
+        <WixExtension Include="WixDependencyExtension">
+            <HintPath>WixDependencyExtension</HintPath>
+            <Name>WixDependencyExtension</Name>
+        </WixExtension>
+        <WixExtension Include="WixBalExtension">
+            <HintPath>WixBalExtension</HintPath>
+            <Name>WixBalExtension</Name>
+        </WixExtension>
+    </ItemGroup>
+    <ItemGroup>
+        <Compile Include="bundle.wxs" />
+        <Compile Include="packagegroups\*.wxs" />
+    </ItemGroup>
+    <ItemGroup>
+        <Content Include="Default.thm" />
+        <Content Include="Default.wxl" />
+        <Content Include="SideBar.png" />
+    </ItemGroup>
+    <ItemGroup>
+        <WxlTemplate Include="*_en-US.wxl_template" />
+    </ItemGroup>
+    <ItemGroup>
+        <LinkerBindInputPaths Include="$(OutputPath)">
+            <BindName></BindName>
+        </LinkerBindInputPaths>
+    </ItemGroup>
+    
+    <ItemDefinitionGroup>
+        <Package>
+            <Properties>BuildForRelease=$(BuildForRelease)</Properties>
+        </Package>
+    </ItemDefinitionGroup>
+    <ItemGroup>
+        <Package Include="..\core\core*.wixproj" />
+        <Package Include="..\crt\crt*.wixproj" />
+        <Package Include="..\dev\dev*.wixproj" />
+        <Package Include="..\doc\doc*.wixproj" />
+        <Package Include="..\exe\exe*.wixproj" />
+        <Package Include="..\lib\lib*.wixproj" />
+        <Package Include="..\path\path*.wixproj" />
+        <Package Include="..\pip\pip*.wixproj" />
+        <Package Include="..\tcltk\tcltk*.wixproj" />
+        <Package Include="..\test\test*.wixproj" />
+        <Package Include="..\tools\tools*.wixproj" />
+    </ItemGroup>
+    
+    <Target Name="BuildPackages" BeforeTargets="BeforeBuild" Condition="'$(RebuildAll)' != 'false'">
+        <MSBuild Projects="@(Package)" BuildInParallel="true" />
+    </Target>
+    
+    <Target Name="BuildLauncher" BeforeTargets="BeforeBuild" Condition="'$(RebuildAll)' != 'false'">
+        <!-- Build the launcher MSI using Exec rather than MSBuild -->
+        <Exec Command='msbuild ..\launcher\launcher.wixproj /p:Platform=x86 /p:OutputPath="$(BuildPath.TrimEnd(`\`))" /p:OutputSuffix=$(Platform) /p:BuildForRelease=$(BuildForRelease)'
+              ContinueOnError="false" />
+    </Target>
+    
+    <Target Name="BuildBootstrapApplication" BeforeTargets="BeforeBuild">
+        <Message Text="Building bootstrap app" Importance="high" />
+        
+        <MSBuild Projects="bootstrap\pythonba.vcxproj"
+                 Targets="Build;GetNativeTargetPath"
+                 UseResultsCache="true"
+                 Properties="Configuration=$(BootstrapConfiguration);Platform=Win32">
+            <Output TaskParameter="TargetOutputs" PropertyName="BootstrapAppPath" />
+        </MSBuild>
+        
+        <PropertyGroup>
+            <DefineConstants>$(DefineConstants);BootstrapApp=$(BootstrapAppPath)</DefineConstants>
+        </PropertyGroup>
+    </Target>
+    
+    <Import Project="..\msi.targets" />
+</Project>
\ No newline at end of file