Issue #28110: launcher.msi has different product codes between 32-bit and 64-bit
diff --git a/Misc/NEWS b/Misc/NEWS
index d3e9fd7..1cf1819 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -348,6 +348,9 @@
 Windows
 -------
 
+- Issue #28110: launcher.msi has different product codes between 32-bit and
+  64-bit
+
 - Issue #25144: Ensures TargetDir is set before continuing with custom
   install.
 
diff --git a/Tools/msi/buildrelease.bat b/Tools/msi/buildrelease.bat
index 2eae07a..e8da3ec 100644
--- a/Tools/msi/buildrelease.bat
+++ b/Tools/msi/buildrelease.bat
@@ -174,11 +174,12 @@
     @echo off

 )

 

-set BUILDOPTS=/p:Platform=%1 /p:BuildForRelease=true /p:DownloadUrl=%DOWNLOAD_URL% /p:DownloadUrlBase=%DOWNLOAD_URL_BASE% /p:ReleaseUri=%RELEASE_URI%

+set BUILDOPTS=/p:BuildForRelease=true /p:DownloadUrl=%DOWNLOAD_URL% /p:DownloadUrlBase=%DOWNLOAD_URL_BASE% /p:ReleaseUri=%RELEASE_URI%

 if "%PGO%" NEQ "" set BUILDOPTS=%BUILDOPTS% /p:PGOBuildPath=%BUILD%

-msbuild "%D%bundle\releaselocal.wixproj" /t:Rebuild %BUILDOPTS% %CERTOPTS% /p:RebuildAll=true

+msbuild "%D%launcher\launcher.wixproj" /p:Platform=x86 %CERTOPTS% /p:ReleaseUri=%RELEASE_URI%

+msbuild "%D%bundle\releaselocal.wixproj" /t:Rebuild /p:Platform=%1 %BUILDOPTS% %CERTOPTS% /p:RebuildAll=true

 if errorlevel 1 exit /B

-msbuild "%D%bundle\releaseweb.wixproj" /t:Rebuild %BUILDOPTS% %CERTOPTS% /p:RebuildAll=false

+msbuild "%D%bundle\releaseweb.wixproj" /t:Rebuild /p:Platform=%1 %BUILDOPTS% %CERTOPTS% /p:RebuildAll=false

 if errorlevel 1 exit /B

 

 msbuild "%D%make_zip.proj" /t:Build %BUILDOPTS% %CERTOPTS%

diff --git a/Tools/msi/bundle/bundle.targets b/Tools/msi/bundle/bundle.targets
index aeeff3b..e0dae21 100644
--- a/Tools/msi/bundle/bundle.targets
+++ b/Tools/msi/bundle/bundle.targets
@@ -87,16 +87,6 @@
         <MSBuild Projects="@(Package)" Targets="$(BuildPackagesTargets)" BuildInParallel="true" />
     </Target>
     
-    <Target Name="BuildLauncher" BeforeTargets="BeforeBuild" Condition="'$(RebuildAll)' != 'false'">
-        <!--
-        Build the launcher MSI using Exec rather than MSBuild
-        Also, never use the test marker for the launcher. It's going to corrupt things anyway, so we'll
-        just disable it by default.
-         -->
-        <Exec Command='msbuild ..\launcher\launcher.wixproj /p:Platform=x86 /p:ReleaseUri="$(ReleaseUri)" /p:OutputPath="$(BuildPath.TrimEnd(`\`))" /p:OutputSuffix=$(Platform) /p:BuildForRelease=$(BuildForRelease) /p:UseTestMarker=false'
-              ContinueOnError="false" />
-    </Target>
-    
     <Target Name="BuildBootstrapApplication" BeforeTargets="BeforeBuild">
         <Message Text="Building bootstrap app" Importance="high" />
         
diff --git a/Tools/msi/bundle/packagegroups/launcher.wxs b/Tools/msi/bundle/packagegroups/launcher.wxs
index 4444f45..7dae8ca 100644
--- a/Tools/msi/bundle/packagegroups/launcher.wxs
+++ b/Tools/msi/bundle/packagegroups/launcher.wxs
@@ -4,7 +4,7 @@
         <PackageGroup Id="launcher">
             <!-- The All Users launcher is always the 32-bit version -->
             <MsiPackage Id="launcher_AllUsers"
-                        SourceFile="launcher.msi"
+                        SourceFile="!(bindpath.build32)en-us\launcher.msi"
                         Compressed="$(var.CompressMSI)"
                         DownloadUrl="$(var.DownloadUrl)"
                         ForcePerMachine="yes"
@@ -14,7 +14,7 @@
                         InstallCondition="(InstallAllUsers or InstallLauncherAllUsers) and Include_launcher and not DetectedLauncher" />
 
             <MsiPackage Id="launcher_JustForMe"
-                        SourceFile="launcher.msi"
+                        SourceFile="!(bindpath.build32)en-us\launcher.msi"
                         Compressed="$(var.CompressMSI)"
                         DownloadUrl="$(var.DownloadUrl)"
                         ForcePerMachine="no"
diff --git a/Tools/msi/make_zip.proj b/Tools/msi/make_zip.proj
index 13f75ba..c411a48 100644
--- a/Tools/msi/make_zip.proj
+++ b/Tools/msi/make_zip.proj
@@ -16,7 +16,7 @@
         <TargetPath>$(OutputPath)\en-us\$(TargetName)$(TargetExt)</TargetPath>
         <CleanCommand>rmdir /q/s "$(IntermediateOutputPath)\zip_$(ArchName)"</CleanCommand>
         <Arguments>"$(PythonExe)" "$(MSBuildThisFileDirectory)\make_zip.py"</Arguments>
-        <Arguments>$(Arguments) -e -o "$(TargetPath)" -t "$(IntermediateOutputPath)\zip_$(ArchName)" -b "$(OutDir.TrimEnd('\'))"</Arguments>
+        <Arguments>$(Arguments) -e -o "$(TargetPath)" -t "$(IntermediateOutputPath)\zip_$(ArchName)" -a "$(ArchName)"</Arguments>
         <Environment>set DOC_FILENAME=python$(PythonVersion).chm
 set VCREDIST_PATH=$(VS140COMNTOOLS)\..\..\VC\redist\$(Platform)\Microsoft.VC140.CRT</Environment>
     </PropertyGroup>