Issue #23260: Update Windows installer
diff --git a/Tools/msi/tcltk/tcltk.props b/Tools/msi/tcltk/tcltk.props
new file mode 100644
index 0000000..41d67c5
--- /dev/null
+++ b/Tools/msi/tcltk/tcltk.props
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup>
+        <!-- Shortcut validation is not necessary -->
+        <SuppressICEs>ICE43</SuppressICEs>
+    </PropertyGroup>
+    <Import Project="..\msi.props" />
+    <ItemGroup>
+        <Compile Include="*.wxs" />
+    </ItemGroup>
+    <ItemGroup>
+        <WxlTemplate Include="*.wxl_template" />
+    </ItemGroup>
+    <ItemGroup>
+        <InstallFiles Include="$(tcltkDir)bin\*.dll" Exclude="$(tcltkDir)bin\*g.dll">
+            <SourceBase>$(tcltkDir)</SourceBase>
+            <Source>!(bindpath.tcltk)</Source>
+            <TargetBase>$(tcltkDir)bin</TargetBase>
+            <Target_>DLLs\</Target_>
+            <Group>tcltk_dlls</Group>
+        </InstallFiles>
+        <InstallFiles Include="$(tcltkDir)bin\*g.dll">
+            <SourceBase>$(tcltkDir)</SourceBase>
+            <Source>!(bindpath.tcltk)</Source>
+            <TargetBase>$(tcltkDir)bin</TargetBase>
+            <Target_>DLLs\</Target_>
+            <Group>tcltk_dlls_d</Group>
+        </InstallFiles>
+
+        <InstallFiles Include="$(tcltkDir)lib\**\*">
+            <SourceBase>$(tcltkDir)</SourceBase>
+            <Source>!(bindpath.tcltk)</Source>
+            <TargetBase>$(tcltkDir)lib</TargetBase>
+            <Target_>tcl\</Target_>
+            <Group>tcltk_lib</Group>
+        </InstallFiles>
+
+        <InstallFiles Include="$(PySourcePath)Lib\tkinter\**\*;$(PySourcePath)Lib\idlelib\**\*;$(PySourcePath)Lib\turtledemo\**\*"
+                      Exclude="$(PySourcePath)Lib\**\*.pyc;$(PySourcePath)Lib\**\*.pyo">
+            <SourceBase>$(PySourcePath)</SourceBase>
+            <Source>!(bindpath.src)</Source>
+            <TargetBase>$(PySourcePath)</TargetBase>
+            <Target_></Target_>
+            <Group>tkinter_lib</Group>
+        </InstallFiles>
+    </ItemGroup>
+    
+    <Import Project="..\msi.targets" />
+</Project>
\ No newline at end of file
diff --git a/Tools/msi/tcltk/tcltk.wixproj b/Tools/msi/tcltk/tcltk.wixproj
new file mode 100644
index 0000000..1dcdfad
--- /dev/null
+++ b/Tools/msi/tcltk/tcltk.wixproj
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup>
+        <ProjectGuid>{DB350600-186C-4E52-BA98-26A7CECB067F}</ProjectGuid>
+        <SchemaVersion>2.0</SchemaVersion>
+        <OutputName>tcltk</OutputName>
+        <OutputType>Package</OutputType>
+        <DefineConstants>IncludeDefaultFeature=1;$(DefineConstants)</DefineConstants>
+    </PropertyGroup>
+    <Import Project="tcltk.props" />
+</Project>
\ No newline at end of file
diff --git a/Tools/msi/tcltk/tcltk.wxs b/Tools/msi/tcltk/tcltk.wxs
new file mode 100644
index 0000000..4d72200
--- /dev/null
+++ b/Tools/msi/tcltk/tcltk.wxs
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+    <Product Id="*" Language="!(loc.LCID)" Name="!(loc.Title)" Version="$(var.Version)" Manufacturer="!(loc.Manufacturer)" UpgradeCode="$(var.UpgradeCode)">
+        <Package InstallerVersion="300" Compressed="yes" InstallScope="perUser" Platform="$(var.Platform)" />
+        <MediaTemplate EmbedCab="yes" CompressionLevel="high" />
+        
+        <PropertyRef Id="UpgradeTable" />
+        <PropertyRef Id="REGISTRYKEY" />
+        
+        <Property Id="PYTHON_EXE" Secure="yes">
+            <ComponentSearch Id="PythonExe" Guid="$(var.PythonwExeComponentGuid)">
+                <FileSearch Name="pythonw.exe" />
+            </ComponentSearch>
+        </Property>
+        
+        <Condition Message="!(loc.NoPython)">PYTHON_EXE</Condition>
+
+        <?ifdef IncludeDefaultFeature ?>
+        <Feature Id="DefaultFeature" AllowAdvertise="no" Title="!(loc.Title)" Description="!(loc.Description)">
+            <ComponentGroupRef Id="tkinter_extension" />
+            <ComponentGroupRef Id="tcltk_dlls" />
+            <ComponentGroupRef Id="tcltk_lib" />
+            <ComponentGroupRef Id="tkinter_lib" />
+            
+            <Component Id="idle_shortcut" Directory="MenuDir">
+                <RegistryValue KeyPath="yes" Root="HKMU" Key="[REGISTRYKEY]\Idle" Type="string" Value="[#Lib_idlelib_idle.pyw]" />
+                <RemoveFolder Id="Remove_MenuDir" On="uninstall" />
+
+                <Shortcut Id="IDLE"
+                          Directory="MenuDir"
+                          Name="!(loc.ShortcutName)"
+                          Description="!(loc.ShortcutDescription)"
+                          Target="[PYTHON_EXE]"
+                          Arguments='"[#Lib_idlelib_idle.pyw]"'
+                          Icon="idle.exe">
+                    <Icon Id="idle.exe" SourceFile="!(bindpath.src)Lib\idlelib\Icons\idle.ico" />
+                </Shortcut>
+            </Component>
+        </Feature>
+        <?endif ?>
+        <?ifdef IncludeSymbols ?>
+        <Feature Id="Symbols" AllowAdvertise="no" Title="!(loc.TitlePdb)" Description="!(loc.DescriptionPdb)">
+            <ComponentGroupRef Id="tkinter_extension_symbols" />
+        </Feature>
+        <?endif ?>
+        <?ifdef IncludeDebugBinaries ?>
+        <Feature Id="DebugBinaries" AllowAdvertise="no" Title="!(loc.Title_d)" Description="!(loc.Description_d)">
+            <ComponentGroupRef Id="tkinter_extension_d" />
+            <ComponentGroupRef Id="tcltk_dlls_d" />
+        </Feature>
+        <?endif ?>
+    </Product>
+</Wix>
diff --git a/Tools/msi/tcltk/tcltk_d.wixproj b/Tools/msi/tcltk/tcltk_d.wixproj
new file mode 100644
index 0000000..ee9af33
--- /dev/null
+++ b/Tools/msi/tcltk/tcltk_d.wixproj
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup>
+        <ProjectGuid>{EDA1FA5A-E2AA-4EAF-B49B-87D981CD0F16}</ProjectGuid>
+        <SchemaVersion>2.0</SchemaVersion>
+        <OutputName>tcltk_d</OutputName>
+        <OutputType>Package</OutputType>
+        <DefineConstants>IncludeDebugBinaries=1;$(DefineConstants)</DefineConstants>
+    </PropertyGroup>
+    <Import Project="tcltk.props" />
+</Project>
\ No newline at end of file
diff --git a/Tools/msi/tcltk/tcltk_en-US.wxl_template b/Tools/msi/tcltk/tcltk_en-US.wxl_template
new file mode 100644
index 0000000..d0f8c10
--- /dev/null
+++ b/Tools/msi/tcltk/tcltk_en-US.wxl_template
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization">
+    <String Id="Descriptor">Tcl/Tk Support</String>
+    <String Id="ShortDescriptor">tcltk</String>
+    <String Id="NoPython">No !(loc.ProductName) installation was detected.</String>
+    <String Id="ShortcutName">IDLE (Python {{ShortVersion}} {{Bitness}})</String>
+    <String Id="ShortcutDescription">Launches IDLE, the interactive environment for !(loc.ProductName).</String>
+</WixLocalization>
diff --git a/Tools/msi/tcltk/tcltk_files.wxs b/Tools/msi/tcltk/tcltk_files.wxs
new file mode 100644
index 0000000..0d1b4a9
--- /dev/null
+++ b/Tools/msi/tcltk/tcltk_files.wxs
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+    <Fragment>
+        <ComponentGroup Id="tkinter_extension">
+            <Component Id="_tkinter.pyd" Directory="DLLs" Guid="*">
+                <File Name="_tkinter.pyd" KeyPath="yes" />
+            </Component>
+            <Component Id="_tkinter.lib" Directory="libs" Guid="*">
+                <File Name="_tkinter.lib" KeyPath="yes" />
+            </Component>
+        </ComponentGroup>
+    </Fragment>
+    
+    <Fragment>
+        <ComponentGroup Id="tkinter_extension_symbols">
+            <Component Id="_tkinter.pdb" Directory="DLLs" Guid="*">
+                <File Name="_tkinter.pdb" />
+            </Component>
+        </ComponentGroup>
+    </Fragment>
+    
+    <Fragment>
+        <ComponentGroup Id="tkinter_extension_d">
+            <Component Id="_tkinter_d.pyd" Directory="DLLs" Guid="*">
+                <File Name="_tkinter_d.pyd" />
+            </Component>
+            <Component Id="_tkinter_d.lib" Directory="DLLs" Guid="*">
+                <File Name="_tkinter_d.lib" />
+            </Component>
+            <Component Id="_tkinter_d.pdb" Directory="DLLs" Guid="*">
+                <File Name="_tkinter_d.pdb" />
+            </Component>
+        </ComponentGroup>
+    </Fragment>
+</Wix>
diff --git a/Tools/msi/tcltk/tcltk_pdb.wixproj b/Tools/msi/tcltk/tcltk_pdb.wixproj
new file mode 100644
index 0000000..ac198d4
--- /dev/null
+++ b/Tools/msi/tcltk/tcltk_pdb.wixproj
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup>
+        <ProjectGuid>{02053AFA-1831-499A-B3EA-D8B223D3C40D}</ProjectGuid>
+        <SchemaVersion>2.0</SchemaVersion>
+        <OutputName>tcltk_pdb</OutputName>
+        <OutputType>Package</OutputType>
+        <DefineConstants>IncludeSymbols=1;$(DefineConstants)</DefineConstants>
+    </PropertyGroup>
+    <Import Project="tcltk.props" />
+</Project>
\ No newline at end of file