<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" >

  <?define FancyZonesProjectName="FancyZones"?>
  <?define ImageResizerProjectName="ImageResizer"?>
  <?define KeyboardManagerProjectName="KeyboardManager"?>
  <?define PowerRenameProjectName="PowerRename"?>
  <?define ShortcutGuideProjectName="ShortcutGuide"?>
  <?define ColorPickerProjectName="ColorPicker"?>
  <?define VideoConferenceProjectName="VideoConference"?>

  <?define RepoDir="$(var.ProjectDir)..\..\" ?>
  <?define BinX64Dir="$(var.RepoDir)x64\$(var.Configuration)\" ?>
  <?define BinX32Dir="$(var.RepoDir)x86\$(var.Configuration)\" ?>

	<Product Id="*"
       Name="PowerToys (Preview)"
       Language="1033"
       Version="$(var.Version)"
       Manufacturer="Microsoft Corporation"
       UpgradeCode="42B84BF7-5FBF-473B-9C8B-049DC16F7708">

    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated" Platform="x64" />

    <MajorUpgrade DowngradeErrorMessage="A later version of [ProductName] is already installed." />

    <Upgrade Id="42B84BF7-5FBF-473B-9C8B-049DC16F7708">
      <UpgradeVersion
         Minimum="0.0.0" Maximum="$(var.Version)"
         Property="PREVIOUSVERSIONSINSTALLED"
         IncludeMinimum="yes" IncludeMaximum="no" />
    </Upgrade>

    <MediaTemplate EmbedCab="yes" />

    <Property Id="WINDOWSBUILDNUMBER" Secure="yes">
      <RegistrySearch Id="BuildNumberSearch" Root="HKLM" Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion" Name="CurrentBuildNumber" Type="raw" />
    </Property>
    <Condition Message="This application is only supported on Windows 10 version 1803 (build 17134) or higher.">
      <![CDATA[(WINDOWSBUILDNUMBER >= 17134)]]>
    </Condition>

    <Icon Id="powertoys.exe" SourceFile="$(var.BinX64Dir)svgs\icon.ico"/>
    <Property Id="ARPPRODUCTICON" Value="powertoys.exe" />
    <Feature Id="CoreFeature" Title="PowerToys" AllowAdvertise="no" Absent="disallow" TypicalDefault="install"
             Description="Contains the Shortcut Guide and Fancy Zones features.">
      <ComponentGroupRef Id="CoreComponents" />
      <ComponentGroupRef Id="ResourcesComponents" />
      <ComponentGroupRef Id="LauncherComponents" />
      <ComponentGroupRef Id="ToolComponents" />
    </Feature>
    <SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLFOLDER]" After="CostFinalize" />

    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
    <UI>
      <UIRef Id="WixUI_PTInstallDir"/>
      <Publish Dialog="ExitDialog"
            Control="Finish"
            Event="EndDialog"
            Value="Return">NOT Installed</Publish>
      <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Property="_REMOVE_ALL" Value="Yes">1</Publish>
      <Publish Dialog="UserExit" Control="Finish" Event="DoAction" Value="TelemetryLogInstallCancel">NOT Installed</Publish>
      <Publish Dialog="FatalError" Control="Finish" Event="DoAction" Value="TelemetryLogInstallFail">NOT Installed</Publish>
      <Publish Dialog="UserExit" Control="Finish" Event="DoAction" Value="TelemetryLogUninstallCancel">Installed AND _REMOVE_ALL="Yes"</Publish>
      <Publish Dialog="FatalError" Control="Finish" Event="DoAction" Value="TelemetryLogUninstallFail">Installed AND _REMOVE_ALL="Yes"</Publish>
      <Publish Dialog="UserExit" Control="Finish" Event="DoAction" Value="TelemetryLogRepairCancel">Installed AND NOT (_REMOVE_ALL="Yes")</Publish>
      <Publish Dialog="FatalError" Control="Finish" Event="DoAction" Value="TelemetryLogRepairFail">Installed AND NOT (_REMOVE_ALL="Yes")</Publish>
    </UI>
    <WixVariable Id="WixUIBannerBmp" Value="$(var.ProjectDir)\Images\banner.png" />
    <WixVariable Id="WixUIDialogBmp" Value="$(var.ProjectDir)\Images\dialog.png" />
    <WixVariable Id="WixUILicenseRtf" Value="$(var.RepoDir)\installer\License.rtf" />
    <Property Id="INSTALLSTARTMENUSHORTCUT" Value="1"/>
    <Property Id="CREATESCHEDULEDTASK" Value="1"/>
    <Property Id="WixShellExecTarget" Value="[#action_runner.exe]" />

    <Property Id ="EXISTINGPOWERRENAMEEXTPATH">
      <RegistrySearch Id="ExistingExtPath" Root="HKCR" Key="CLSID\{0440049F-D1DC-4E46-B27B-98393D79486B}\InprocServer32" Type="raw"/>
    </Property>
    <Property Id ="EXISTINGIMAGERESIZERPATH">
      <RegistrySearch Id="ExistingImageResizerPath" Root="HKCR" Key="CLSID\{51B4D7E5-7568-4234-B4BB-47FB3C016A69}\InprocServer32" Type="raw"/>
    </Property>

    <InstallUISequence>
      <Custom Action="DetectPrevInstallPath" After="CostFinalize" />
    </InstallUISequence>
    <InstallExecuteSequence>
      <Custom Action="SetRegisterPowerToysSchTaskParam" Before="RegisterPowerToysSchTask" />
      <Custom Action="RegisterPowerToysSchTask" After="InstallFiles">
        NOT Installed and CREATESCHEDULEDTASK = 1
      </Custom>
      <Custom Action="WixCloseApplications" Before="RemoveFiles" />
      <Custom Action="RemovePowerToysSchTasks" After="RemoveFiles" />
      <Custom Action="TelemetryLogInstallSuccess" After="InstallFinalize">
        NOT Installed
      </Custom>
      <Custom Action="TelemetryLogUninstallSuccess" After="InstallFinalize">
        Installed and (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")
      </Custom>

      <Custom Action="TerminateProcesses" Before="InstallValidate" />

    </InstallExecuteSequence>

    <CustomAction
      Id="TerminateProcesses"
      Return="ignore"
      Execute="immediate"
      BinaryKey="PTCustomActions"
      DllEntry="TerminateProcessesCA" />

    <CustomAction Id="SetRegisterPowerToysSchTaskParam"
                  Property="RegisterPowerToysSchTask"
                  Value="[#PowerToys.exe]" />

    <!-- Needs to Impersonate="no" and Execute="deferred" in order to run elevated. -->
    <CustomAction Id="RegisterPowerToysSchTask"
                  Return="ignore"
                  Impersonate="no"
                  Execute="deferred"
                  BinaryKey="PTCustomActions"
                  DllEntry="CreateScheduledTaskCA"
                   />

    <CustomAction Id="RemovePowerToysSchTasks"
                  Return="ignore"
                  Impersonate="no"
                  Execute="deferred"
                  BinaryKey="PTCustomActions"
                  DllEntry="RemoveScheduledTasksCA"
                   />

    <CustomAction Id="TelemetryLogInstallSuccess"
                  Return="ignore"
                  Impersonate="yes"
                  BinaryKey="PTCustomActions"
                  DllEntry="TelemetryLogInstallSuccessCA"
                   />

    <CustomAction Id="TelemetryLogInstallCancel"
                  Return="ignore"
                  Impersonate="yes"
                  BinaryKey="PTCustomActions"
                  DllEntry="TelemetryLogInstallCancelCA"
                   />

    <CustomAction Id="TelemetryLogInstallFail"
                  Return="ignore"
                  Impersonate="yes"
                  BinaryKey="PTCustomActions"
                  DllEntry="TelemetryLogInstallFailCA"
                   />

    <CustomAction Id="TelemetryLogUninstallSuccess"
                  Return="ignore"
                  Impersonate="yes"
                  BinaryKey="PTCustomActions"
                  DllEntry="TelemetryLogUninstallSuccessCA"
                   />

    <CustomAction Id="TelemetryLogUninstallCancel"
                  Return="ignore"
                  Impersonate="yes"
                  BinaryKey="PTCustomActions"
                  DllEntry="TelemetryLogUninstallCancelCA"
                   />

    <CustomAction Id="TelemetryLogUninstallFail"
                  Return="ignore"
                  Impersonate="yes"
                  BinaryKey="PTCustomActions"
                  DllEntry="TelemetryLogUninstallFailCA"
                   />

    <CustomAction Id="TelemetryLogRepairCancel"
                  Return="ignore"
                  Impersonate="yes"
                  BinaryKey="PTCustomActions"
                  DllEntry="TelemetryLogRepairCancelCA"
                   />

    <CustomAction Id="TelemetryLogRepairFail"
                  Return="ignore"
                  Impersonate="yes"
                  BinaryKey="PTCustomActions"
                  DllEntry="TelemetryLogRepairFailCA"
                   />

    <CustomAction Id="DetectPrevInstallPath"
                  Return="check"
                  Impersonate="yes"
                  BinaryKey="PTCustomActions"
                  DllEntry="DetectPrevInstallPathCA"
                  />

    <!-- Close 'PowerToys.exe' before uninstall-->
    <Property Id="MSIRESTARTMANAGERCONTROL" Value="Disable" />
    <util:CloseApplication CloseMessage="yes" Target="PowerToys.exe" ElevatedCloseMessage="yes" RebootPrompt="no" TerminateProcess="0" />
  </Product>

  <Fragment>
    <Binary Id="PTCustomActions" SourceFile="$(var.PowerToysSetupCustomActions.TargetPath)" />
  </Fragment>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFiles64Folder">
        <Directory Id="INSTALLFOLDER" Name="PowerToys">
          <Directory Id="SvgsInstallFolder" Name="svgs"/>
	      <Directory Id="ToolsFolder" Name="Tools"/>
          <Directory Id="ModulesInstallFolder" Name="modules">
            <Directory Id="ImageResizerInstallFolder" Name="$(var.ImageResizerProjectName)" />
            <Directory Id="PowerRenameInstallFolder" Name="$(var.PowerRenameProjectName)"/>
            <Directory Id="ShortcutGuideInstallFolder" Name="$(var.ShortcutGuideProjectName)"/>
              <Directory Id="VideoConferenceInstallFolder" Name="$(var.VideoConferenceProjectName)">
               <Directory Id="VideoConferenceIconsFolder" Name="Icons" />
              </Directory>
            <Directory Id="FileExplorerPreviewInstallFolder" Name="FileExplorerPreview" />
            <Directory Id="FancyZonesInstallFolder" Name="$(var.FancyZonesProjectName)" />
            <Directory Id="KeyboardManagerInstallFolder" Name="$(var.KeyboardManagerProjectName)" />
            <Directory Id="ColorPickerInstallFolder" Name="$(var.ColorPickerProjectName)">
              <Directory Id="ColorPickerResourcesFolder" Name="Resources"/>
            </Directory>
            <Directory Id="LauncherInstallFolder" Name="launcher">
              <Directory Id="AssetsFolder" Name="Assets" />
              <Directory Id="LauncherImagesFolder" Name="Images" />
              <Directory Id="LauncherPluginsFolder" Name="Plugins">
                <Directory Id="CalculatorPluginFolder" Name="Calculator">
                  <Directory Id="CalculatorImagesFolder" Name="Images" />
                  <Directory Id="CalculatorLanguagesFolder" Name="Languages" />
                </Directory>
                <Directory Id="FolderPluginFolder" Name="Microsoft.Plugin.Folder">
                  <Directory Id="FolderPluginImagesFolder" Name="Images" />
                  <Directory Id="FolderPluginLanguagesFolder" Name="Languages" />
                </Directory>
                <Directory Id="ProgramPluginFolder" Name="Microsoft.Plugin.Program">
                  <Directory Id="ProgramImagesFolder" Name="Images" />
                  <Directory Id="ProgramLanguagesFolder" Name="Languages" />
                </Directory>
                <Directory Id="ShellPluginFolder" Name="Microsoft.Plugin.Shell">
                  <Directory Id="ShellImagesFolder" Name="Images" />
                  <Directory Id="ShellLanguagesFolder" Name="Languages" />
                </Directory>
                <Directory Id="IndexerPluginFolder" Name="Microsoft.Plugin.Indexer">
                  <Directory Id="IndexerImagesFolder" Name="Images" />
                  <Directory Id="IndexerLanguagesFolder" Name="Languages" />
                </Directory>
                <Directory Id="UriPluginFolder" Name="Microsoft.Plugin.Uri">
                  <Directory Id="UriImagesFolder" Name="Images" />
                  <Directory Id="UriLanguagesFolder" Name="Languages" />
                </Directory>
                <Directory Id="VSCodeWorkspacesPluginFolder" Name="VSCodeWorkspace">
                  <Directory Id="VSCodeWorkspaceImagesFolder" Name="Images" />
                  <Directory Id="VSCodeWorkspaceLanguagesFolder" Name="Languages" />
                </Directory>
                <Directory Id="WindowWalkerPluginFolder" Name="Microsoft.Plugin.WindowWalker">
                  <Directory Id="WindowWalkerImagesFolder" Name="Images" />
                  <Directory Id="WindowWalkerLanguagesFolder" Name="Languages" />
                </Directory>
                <Directory Id="RegistryPluginFolder" Name="Microsoft.PowerToys.Run.Plugin.Registry">
                  <Directory Id="RegistryImagesFolder" Name="Images" />
                  <Directory Id="RegistryLanguagesFolder" Name="Languages" />
                </Directory>
                <Directory Id="ServicePluginFolder" Name="Service">
                  <Directory Id="ServiceImagesFolder" Name="Images" />
                </Directory>
                <Directory Id="SystemPluginFolder" Name="System">
                  <Directory Id="SystemImagesFolder" Name="Images" />
                </Directory>
              </Directory>
              <Directory Id="LauncherPropertiesFolder" Name="Properties" />
            </Directory>
          </Directory>
          <Directory Id="SettingsV2InstallFolder" Name="Settings">
            <Directory Id="SettingsV2ViewsInstallFolder" Name="Views"/>
            <Directory Id="SettingsV2StylesInstallFolder" Name="Styles"/>
            <Directory Id="SettingsV2PropertiesInstallFolder" Name="Properties"/>
            <Directory Id="SettingsV2AssetsInstallFolder" Name="Assets">
              <Directory Id="SettingsV2OOBEAssetsFluentIconsInstallFolder" Name="FluentIcons" />
              <Directory Id="SettingsV2AssetsModulesInstallFolder" Name="Modules" >
                <Directory Id="SettingsV2OOBEAssetsModulesInstallFolder" Name="OOBE" />
              </Directory>
            </Directory>
            <Directory Id="SettingsV2ControlsInstallFolder" Name="Controls"/>
            <Directory Id="SettingsV2XamlInstallFolder" Name="Microsoft.UI.Xaml">
              <Directory Id="SettingsV2XamlAssetsInstallFolder" Name="Assets" />
            </Directory>
          </Directory>
          <Directory Id="SettingsHtmlInstallFolder" Name="settings-html">
            <Directory Id="SettingsHtmlDistInstallFolder" Name="dist"/>
          </Directory>
        </Directory>
      </Directory>
      <Directory Id="ProgramMenuFolder">
        <Directory Id="ApplicationProgramsFolder" Name="PowerToys (Preview)"/>
      </Directory>
      <Directory Id="DesktopFolder" Name="Desktop" />        
   </Directory>
  </Fragment>

  <Fragment>
    <DirectoryRef Id="INSTALLFOLDER" FileSource="$(var.BinX64Dir)">
      <Component Id="powertoys_toast_clsid" Win64="yes">
        <RegistryKey Root="HKCR" Key="Software\Classes\CLSID\{DD5CACDA-7C2E-4997-A62A-04A597B58F76}">
          <RegistryValue Type="string" Value="PowerToys Toast Notifications Background Activator" />
          <RegistryValue Type="string" Key="LocalServer32" Value="[INSTALLFOLDER]PowerToys.exe -ToastActivated" />
          <RegistryValue Type="string" Key="LocalServer32" Name="ThreadingModel" Value="Apartment" />
        </RegistryKey>
      </Component>
      <Component Id="powertoys_exe" Guid="A2C66D91-3485-4D00-B04D-91844E6B345B" Win64="yes">
        <File Id="PowerToys.exe" KeyPath="yes" Checksum="yes" />
        <RegistryKey Root="HKCR" Key="powertoys">
          <RegistryValue Type="string" Name="URL Protocol" Value=""/>
          <RegistryValue Type="string" Value="URL:PowerToys custom internal URI protocol"/>
          <RegistryKey Key="DefaultIcon">
            <RegistryValue Type="string" Value="PowerToys.exe" />
          </RegistryKey>
          <RegistryKey Key="shell\open\command">
            <RegistryValue Type="string" Value="&quot;[INSTALLFOLDER]PowerToys.exe&quot; &quot;%1&quot;" />
          </RegistryKey>
        </RegistryKey>
      </Component>
      <Component Id="settings_exe" Guid="A5A461A9-7097-4CBA-9D39-3DBBB6B7B80C" Win64="yes">
        <File Id="PowerToysSettings.exe" KeyPath="yes" Checksum="yes" />
      </Component>
      <Component Id="BackgroundActivator_dll" Guid="23B25EE4-BCA2-45DF-BBCD-82FBDF01C5AB" Win64="yes">
        <File Id="BackgroundActivatorDLL.dll" KeyPath="yes" Checksum="yes" />
      </Component>
      <Component Id="action_runner_exe" Guid="626ABB17-16F0-4007-9A58-6998724A5E14" Win64="yes">
        <File Id="action_runner.exe" KeyPath="yes" Checksum="yes" />
      </Component>
      <Component Id="License_rtf" Guid="3E5AE43B-CFB4-449B-A346-94CAAFF3312E" Win64="yes">
        <File Source="$(var.RepoDir)\installer\License.rtf" Id="License.rtf" KeyPath="yes" />
      </Component>
      <Component Id="Notice_md" Guid="E2FE99F5-5DF7-44EA-8B1C-2BDF8CEC5E6D" Win64="yes">
        <File Source="$(var.RepoDir)\Notice.md" Id="Notice.md" KeyPath="yes" />
      </Component>
      <Component Id="powertoysinterop_dll" Guid="B7DD2DF4-C8F2-46FA-9571-D6EF1588ADF3" Win64="yes">
        <File Id="PowerToysInterop.dll" KeyPath="yes" Checksum="yes" />
      </Component>
      <Component Id="vcredist_dlls" Guid="CBE26CB0-3AD0-4336-A7D6-503046BADEBC" Win64="yes">
        <!-- VCRuntime -->
        <?foreach File in vcruntime140.dll;vcruntime140_1.dll;concrt140.dll;msvcp140.dll;msvcp140_1.dll;msvcp140_2.dll;msvcp140_codecvt_ids.dll;vccorlib140.dll?>
          <File Id="$(var.File)" Source="$(var.RepoDir)installer\VCRuntime\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="ApplicationProgramsFolder">
      <Component Id="PowerToysStartMenuShortcut" Guid="336AB4F9-078C-4DCA-B69F-3808A9FFD758">
        <Shortcut Id="ApplicationStartMenuShortcut"
          Name="PowerToys (Preview)"
          Description="PowerToys - Windows system utilities to maximize productivity"
          Icon="powertoys.exe"
          IconIndex="0"
          Target="[!PowerToys.exe]"
          WorkingDirectory="INSTALLFOLDER">
          <ShortcutProperty Key="System.AppUserModel.ID" Value="Microsoft.PowerToysWin32"/>
        </Shortcut>
        <RemoveFolder Id="CleanUpStartMenuShortCut" Directory="ApplicationProgramsFolder" On="uninstall"/>
        <!-- ApplicationStartMenuShortcut is implicitly installed in HKCU, so WIX won't allow changing this reg value to HKLM. -->
        <RegistryValue Root="HKCU" Key="Software\Microsoft\PowerToys" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
      </Component>
    </DirectoryRef>
    
    <DirectoryRef Id="SvgsInstallFolder" FileSource="$(var.BinX64Dir)svgs\">
      <Component Id="PowerToysSvgs" Guid="7C4D4EED-9338-423D-992C-DCE02F3E2D35" Win64="yes">
        <File Source="$(var.BinX64Dir)svgs\0.svg" />
        <File Source="$(var.BinX64Dir)svgs\1.svg" />
        <File Source="$(var.BinX64Dir)svgs\2.svg" />
        <File Source="$(var.BinX64Dir)svgs\3.svg" />
        <File Source="$(var.BinX64Dir)svgs\4.svg" />
        <File Source="$(var.BinX64Dir)svgs\5.svg" />
        <File Source="$(var.BinX64Dir)svgs\6.svg" />
        <File Source="$(var.BinX64Dir)svgs\7.svg" />
        <File Source="$(var.BinX64Dir)svgs\8.svg" />
        <File Source="$(var.BinX64Dir)svgs\9.svg" />
        <File Source="$(var.BinX64Dir)svgs\no_active_window.svg" />
        <File Source="$(var.BinX64Dir)svgs\overlay.svg" />
        <File Source="$(var.BinX64Dir)svgs\overlay_portrait.svg" />
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="FancyZonesInstallFolder" FileSource="$(var.BinX64Dir)modules\">
      <Component Id="Module_FancyZones" Guid="C6B5272E-6ED4-4B80-B0E7-2FF0355D8CF4" Win64="yes">
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\fancyzones.dll" KeyPath="yes" />
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\FancyZonesEditor.dll" />
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\FancyZonesEditor.runtimeconfig.json" />
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\FancyZonesEditor.deps.json" />
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\FancyZonesEditor.exe" />
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\ControlzEx.dll" />
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\Microsoft.Xaml.Behaviors.dll" />
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\ModernWpf.dll" />
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\ModernWpf.Controls.dll" />
        <File Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\System.Text.Json.dll" />
        <File Id="FancyZones_ManagedCommon" Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\ManagedCommon.dll" />
        <File Id="FancyZones_Microsoft.PowerToys.Common.UI" Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\Microsoft.PowerToys.Common.UI.dll" />
        <File Id="FancyZones_Telemetry.dll" Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\ManagedTelemetry.dll" />
        <File Id="FancyZone_System.IO.Abstractions.dll" Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\System.IO.Abstractions.dll" />
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="ToolsFolder">
      <Component Id="BugReportTool_exe" Guid="0F8E3E9F-2E86-4660-A3BF-AE4DD431B93C" Win64="yes">
        <File Source="$(var.BinX64Dir)BugReportTool\BugReportTool.exe" Id="BugReportTool.exe" KeyPath="yes" Checksum="yes" />
      </Component>
      <Component Id="WebcamReportTool_exe" Guid="B6005DAC-8C26-4865-91B3-99F098422C13" Win64="yes">
        <File Source="$(var.BinX64Dir)WebcamReportTool\WebcamReportTool.exe" Id="WebcamReportTool.exe" Checksum="yes" />
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="ModulesInstallFolder" FileSource="$(var.BinX64Dir)modules\">

      <Component Id="Module_PowerPreview_PerUserRegistry" Guid="CD90ADC0-7CD5-4A62-B0AF-23545C1E6DD3" Win64="yes">
        <!-- Added a separate component for Per-User registry changes -->
        <!-- Registry Key for Class Registration of Svg Preview Handler -->
        <RegistryKey Root="HKCR" Key="CLSID\{ddee2b8a-6807-48a6-bb20-2338174ff779}">
          <RegistryValue Type="string" Value="Microsoft.PowerToys.PreviewHandler.Svg.SvgPreviewHandler" />
          <RegistryValue Type="string" Name="DisplayName" Value="Svg Preview Handler" />
          <RegistryValue Type="string" Name="AppID" Value="{CF142243-F059-45AF-8842-DBBE9783DB14}" />
          <RegistryValue Type="string" Key="Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value=""/>
          <RegistryValue Type="string" Key="InprocServer32" Value="[FileExplorerPreviewInstallFolder]SvgPreviewHandler.comhost.dll" />
          <RegistryValue Type="string" Key="InprocServer32" Name="Assembly" Value="SvgPreviewHandler, Version=$(var.Version).0, Culture=neutral" />
          <RegistryValue Type="string" Key="InprocServer32" Name="Class" Value="Microsoft.PowerToys.PreviewHandler.Svg.SvgPreviewHandler" />
          <RegistryValue Type="string" Key="InprocServer32" Name="ThreadingModel" Value="Both" />
          <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="Assembly" Value="SvgPreviewHandler, Version=$(var.Version).0, Culture=neutral" />
          <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="Class" Value="Microsoft.PowerToys.PreviewHandler.Svg.SvgPreviewHandler" />
        </RegistryKey>
        <!-- Registry Key for Class Registration of Svg Thumbnail Provider -->
        <RegistryKey Root="HKCR" Key="CLSID\{36B27788-A8BB-4698-A756-DF9F11F64F84}">
            <RegistryValue Type="string" Value="Microsoft.PowerToys.ThumbnailHandler.Svg.SvgThumbnailProvider" />
            <RegistryValue Type="string" Name="DisplayName" Value="Svg Thumbnail Provider" />
            <RegistryValue Type="string" Name="AppID" Value="{CF142243-F059-45AF-8842-DBBE9783DB14}" />
            <RegistryValue Type="string" Key="Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value=""/>
            <RegistryValue Type="string" Key="InprocServer32" Value="[FileExplorerPreviewInstallFolder]SvgThumbnailProvider.comhost.dll" />
            <RegistryValue Type="string" Key="InprocServer32" Name="Assembly" Value="SvgThumbnailProvider, Version=$(var.Version).0, Culture=neutral" />
            <RegistryValue Type="string" Key="InprocServer32" Name="Class" Value="Microsoft.PowerToys.ThumbnailHandler.Svg.SvgThumbnailProvider" />
            <RegistryValue Type="string" Key="InprocServer32" Name="ThreadingModel" Value="Both" />
            <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="Assembly" Value="SvgThumbnailProvider, Version=$(var.Version).0, Culture=neutral" />
            <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="Class" Value="Microsoft.PowerToys.ThumbnailHandler.Svg.SvgThumbnailProvider" />
        </RegistryKey>
        <!-- Registry Key for Class Registration of Markdown Preview Handler -->
        <RegistryKey Root="HKCR" Key="CLSID\{45769bcc-e8fd-42d0-947e-02beef77a1f5}">
          <RegistryValue Type="string" Value="Microsoft.PowerToys.PreviewHandler.Markdown.MarkdownPreviewHandler" />
          <RegistryValue Type="string" Name="DisplayName" Value="Markdown Preview Handler" />
          <RegistryValue Type="string" Name="AppID" Value="{CF142243-F059-45AF-8842-DBBE9783DB14}" />
          <RegistryValue Type="string" Key="Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" />
          <RegistryValue Type="string" Key="InprocServer32" Value="[FileExplorerPreviewInstallFolder]MarkdownPreviewHandler.comhost.dll" />
          <RegistryValue Type="string" Key="InprocServer32" Name="Assembly" Value="MarkdownPreviewHandler, Version=$(var.Version).0, Culture=neutral" />
          <RegistryValue Type="string" Key="InprocServer32" Name="Class" Value="Microsoft.PowerToys.PreviewHandler.Markdown.MarkdownPreviewHandler" />
          <RegistryValue Type="string" Key="InprocServer32" Name="ThreadingModel" Value="Both" />
          <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="Assembly" Value="MarkdownPreviewHandler, Version=$(var.Version).0, Culture=neutral" />
          <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="Class" Value="Microsoft.PowerToys.PreviewHandler.Markdown.MarkdownPreviewHandler" />
        </RegistryKey>
        <!-- Registry Key for AppID registration -->
        <RegistryKey Root="HKCR" Key="AppID\{CF142243-F059-45AF-8842-DBBE9783DB14}">
          <RegistryValue Type="expandable" Name="DllSurrogate" Value="%SystemRoot%\system32\prevhost.exe" />
        </RegistryKey>
        <!-- Add Svg preview handler to preview handlers list -->
        <RegistryKey Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\PreviewHandlers">
          <RegistryValue Type="string" Name="{ddee2b8a-6807-48a6-bb20-2338174ff779}" Value="Svg Preview Handler" />
        </RegistryKey>
        <!-- Add Markdown preview handler to preview handlers list -->
        <RegistryKey Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\PreviewHandlers">
          <RegistryValue Type="string" Name="{45769bcc-e8fd-42d0-947e-02beef77a1f5}" Value="Markdown Preview Handler" />
        </RegistryKey>
        <!-- Add file type association for Svg Preview Handler -->
        <RegistryKey Root="HKCR" Key=".svg\shellex">
          <RegistryValue Type="string" Key="{8895b1c6-b41f-4c1c-a562-0d564250836f}" Value="{ddee2b8a-6807-48a6-bb20-2338174ff779}" />
        </RegistryKey>
        <!-- Add file type association for Svg Thumbnail Provider -->
        <RegistryKey Root="HKCR" Key=".svg\shellex">
            <RegistryValue Type="string" Key="{E357FCCD-A995-4576-B01F-234630154E96}" Value="{36B27788-A8BB-4698-A756-DF9F11F64F84}" />
        </RegistryKey>
        <!-- Add file type association for Markdown Preview Handler -->
        <RegistryKey Root="HKCR" Key=".md\shellex">
          <RegistryValue Type="string" Key="{8895b1c6-b41f-4c1c-a562-0d564250836f}" Value="{45769bcc-e8fd-42d0-947e-02beef77a1f5}" />
        </RegistryKey>
        <!-- Update Key to use IE11 for prevhost.exe -->
        <RegistryKey Root="HKLM" Key="Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION">
          <RegistryValue Type="integer" Name="prevhost.exe" Value="11000" />
        </RegistryKey>
        <!-- Update Key to use IE11 for dllhost.exe -->
        <RegistryKey Root="HKLM" Key="Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION">
            <RegistryValue Type="integer" Name="dllhost.exe" Value="11000" />
        </RegistryKey>
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="ImageResizerInstallFolder" FileSource="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)">
      <Component Id="Module_ImageResizer" Guid="96E63289-759C-4A73-A56B-EE7429932F72" Win64="yes">
        <File Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ImageResizer.exe" />
        <File Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ImageResizerExt.dll" KeyPath="yes" />
        <File Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\Newtonsoft.Json.dll" />
        <File Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ImageResizer.dll" />
        <File Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ImageResizer.deps.json" />
        <File Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ImageResizer.runtimeconfig.json" />
        <File Id="ImageResizer_ManagedCommon" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ManagedCommon.dll" />
        <File Id="ImageResizer_ManagedTelemetry" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ManagedTelemetry.dll" />
        <File Id="ImageResizer_Microsoft.PowerToys.Common.UI" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\Microsoft.PowerToys.Common.UI.dll" />
        <File Id="Module_ImageResizer_ControlzEX" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ControlzEx.dll" />
        <File Id="Module_ImageResizer_ModernWpf_Controls" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ModernWpf.Controls.dll" />
        <File Id="Module_ImageResizer_ModernWpf" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\ModernWpf.dll" />
        <File Id="Module_ImageResizer_System_Text_Json" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\System.Text.Json.dll" />
        <File Id="Module_ImageResizer_Microsoft_Xaml_Behaviors" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\Microsoft.Xaml.Behaviors.dll" />
        <File Id="ImageResizer_interop" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\PowerToysInterop.dll" />
        <File Id="ImageResizer_System.IO.Abstractions.dll" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\System.IO.Abstractions.dll" />

        <!-- VCRuntime -->
        <?foreach File in vcruntime140.dll;vcruntime140_1.dll;concrt140.dll;msvcp140.dll;msvcp140_1.dll;msvcp140_2.dll;msvcp140_codecvt_ids.dll;vccorlib140.dll?>
        <File Id="ImageResizer_$(var.File)" Source="$(var.RepoDir)installer\VCRuntime\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="Module_ImageResizer_Registry" Guid="8B593E2C-2D9B-4EBC-93F7-A2B69707DAC9" Win64="yes">
        <RegistryKey Root="HKCR" Key="CLSID\{51B4D7E5-7568-4234-B4BB-47FB3C016A69}\InprocServer32">
          <RegistryValue Value="[ImageResizerInstallFolder]ImageResizerExt.dll" Type="string" />
          <RegistryValue Name="ThreadingModel" Value="Apartment" Type="string" />
        </RegistryKey>
        <!-- Registry Key for the drag and drop handler -->
        <RegistryValue Root="HKCR"
                       Key="Directory\ShellEx\DragDropHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <!-- Registry Keys for the context menu handler for each of the following image formats: bmp, dib, gif, jfif, jpe, jpeg, jpg, jxr, png, rle, tif, tiff, wdp  -->
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.bmp\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.dib\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.gif\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.jfif\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.jpe\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.jpeg\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.jpg\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.jxr\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.png\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.rle\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.tif\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.tiff\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
        <RegistryValue Root="HKCR"
                       Key="SystemFileAssociations\.wdp\ShellEx\ContextMenuHandlers\ImageResizer"
                       Value="{51B4D7E5-7568-4234-B4BB-47FB3C016A69}"
                       Type="string" />
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="PowerRenameInstallFolder" FileSource="$(var.BinX64Dir)modules\$(var.PowerRenameProjectName)">
      <Component Id="Module_PowerRename" Guid="E4401D08-27FE-4F96-BA17-0C61FD79E684" Win64="yes">
        <File Source="$(var.BinX64Dir)modules\$(var.PowerRenameProjectName)\PowerRenameExt.dll" KeyPath="yes" />
        <RegistryKey Root="HKCR" Key="CLSID\{0440049F-D1DC-4E46-B27B-98393D79486B}">
          <RegistryValue Type="string" Value="PowerRename Shell Extension" />
          <RegistryValue Type="string" Name="ContextMenuOptIn" Value="" />
          <RegistryValue Type="string" Key="InprocServer32" Value="[PowerRenameInstallFolder]PowerRenameExt.dll" />
          <RegistryValue Type="string" Key="InprocServer32" Name="ThreadingModel" Value="Apartment" />
        </RegistryKey>
        <RegistryKey Root="HKCR" Key="AllFileSystemObjects\ShellEx\ContextMenuHandlers\PowerRenameExt">
          <RegistryValue Type="string" Value="{0440049F-D1DC-4E46-B27B-98393D79486B}"/>
        </RegistryKey>
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="ShortcutGuideInstallFolder" FileSource="$(var.BinX64Dir)modules\$(var.ShortcutGuideProjectName)\">
      <Component Id="Module_ShortcutGuide" Guid="CBD0AC09-91D3-428E-B2B3-05745ADF3473" Win64="yes">
        <File Source="$(var.BinX64Dir)modules\$(var.ShortcutGuideProjectName)\$(var.ShortcutGuideProjectName).dll" KeyPath="yes" />
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="VideoConferenceInstallFolder" FileSource="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\">
     <Component Id="Module_VideoConference" Guid="5996527a-40fc-432e-b3ac-abc0b4bd3887" Win64="yes">
      <Condition>WINDOWSBUILDNUMBER >= 18362</Condition>
      <File SelfRegCost="1" Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\VideoConferenceProxyFilter_x64.dll" KeyPath="yes">
        <Class Id="{31AD75E9-8C3A-49C8-B9ED-5880D6B4A764}" Context="InprocServer32" ThreadingModel="apartment" Description="PowerToys VideoConference Mute" />
      </File>
      <File SelfRegCost="1" Source="$(var.BinX32Dir)modules\$(var.VideoConferenceProjectName)\VideoConferenceProxyFilter_x86.dll">
        <Class Id="{31AD75E9-8C3A-49C8-B9ED-5880D6B4A732}" Context="InprocServer32" ThreadingModel="apartment" Description="PowerToys VideoConference Mute" />
      </File>
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\VideoConferenceModule.dll" />
     </Component>
    </DirectoryRef>
    <DirectoryRef Id="VideoConferenceIconsFolder" FileSource="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons">
     <Component Id="Module_VideoConferenceIcons" Guid="5996527a-40fc-432e-b34c-abc0b4bd3887" Win64="yes">
      <Condition>WINDOWSBUILDNUMBER >= 18362</Condition>
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\Off-NotInUse Dark.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\Off-NotInUse Light.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\Off-Off Dark.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\Off-Off Light.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\Off-On Dark.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\Off-On Light.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\On-NotInUse Dark.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\On-NotInUse Light.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\On-Off Light.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\On-Off Dark.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\On-On Dark.png" />
      <File Source="$(var.BinX64Dir)modules\$(var.VideoConferenceProjectName)\Icons\On-On Light.png" />
     </Component>
    </DirectoryRef>

    <DirectoryRef Id="KeyboardManagerInstallFolder" FileSource="$(var.BinX64Dir)modules\$(var.KeyboardManagerProjectName)\">
      <Component Id="Module_KeyboardManager" Guid="9279BD82-786F-4F0B-8E49-DB484EE34C9B" Win64="yes">
        <File Source="$(var.BinX64Dir)modules\$(var.KeyboardManagerProjectName)\KeyboardManager.dll" />
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="ColorPickerInstallFolder" FileSource="$(var.BinX64Dir)modules\$(var.ColorPickerProjectName)">
      <Component Id="Module_ColorPicker" Guid="8A52A69E-37B2-4BEA-9D73-77763066052F" Win64="yes">
        <?foreach File in ColorPicker.dll;System.IO.Abstractions.dll;ColorPickerUI.exe;ColorPickerUI.dll;ColorPickerUI.deps.json;ColorPickerUI.runtimeconfig.json;Microsoft.PowerToys.Settings.UI.Lib.dll;PowerToysInterop.dll;System.Text.Json.dll;ManagedTelemetry.dll;ManagedCommon.dll;ControlzEx.dll;Microsoft.Xaml.Behaviors.dll;ModernWpf.Controls.dll;ModernWpf.dll;System.ComponentModel.Composition.dll;Microsoft.PowerToys.Common.UI.dll;System.Deployment.dll;System.Runtime.Serialization.Formatters.Soap.dll;System.Windows.Forms.dll?>
        <File Id="ColorPickerFile_$(var.File)" Source="$(var.BinX64Dir)modules\$(var.ColorPickerProjectName)\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="ColorPickerResourcesFolder" FileSource="$(var.BinX64Dir)modules\$(var.ColorPickerProjectName)\Resources">
      <Component Id="Module_ColorPicker_Resources" Guid="7544BD0F-1DB6-4C53-89D3-ADAD472FDCC1">
        <?foreach File in colorPicker.cur;icon.ico?>
        <File Id="ColorPickerFile_$(var.File)" Source="$(var.BinX64Dir)modules\$(var.ColorPickerProjectName)\Resources\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="FileExplorerPreviewInstallFolder" FileSource="$(var.RepoDir)\modules\FileExplorerPreview\">
      <Component Id="Module_PowerPreview" Guid="FF1700D5-1B07-4E07-9A62-4D206645EEA9" Win64="yes">
        <!-- Component to include PowerPreview Module Source dll's -->
        <!-- File to include PowerPreview Module native dll -->
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\powerpreview.dll" KeyPath="yes" />
        <!-- File to include common library used by preview handlers -->
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\PreviewHandlerCommon.dll" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\PreviewHandlerCommon.deps.json" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\ManagedTelemetry.dll" />
        <!-- File to include dll for Svg Preview Handler -->
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\SvgPreviewHandler.dll" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\SvgPreviewHandler.comhost.dll" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\SvgPreviewHandler.runtimeconfig.json" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\SvgPreviewHandler.deps.json" />
        <!-- File to include dll for Svg Preview Handler -->
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\SvgThumbnailProvider.dll" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\SvgThumbnailProvider.comhost.dll" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\SvgThumbnailProvider.runtimeconfig.json" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\SvgThumbnailProvider.deps.json" />
        <!-- Files to include dll's for Markdown Preview Handler and it's dependencies -->
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\MarkdownPreviewHandler.dll" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\MarkdownPreviewHandler.comhost.dll" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\MarkdownPreviewHandler.runtimeconfig.json" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\MarkdownPreviewHandler.deps.json" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\Markdig.Signed.dll" />
        <File Source="$(var.BinX64Dir)modules\FileExplorerPreview\HtmlAgilityPack.dll" />
        <File Id="FileExplorerPreview_System.IO.Abstractions.dll" Source="$(var.BinX64Dir)modules\FileExplorerPreview\System.IO.Abstractions.dll" />
      </Component>
    </DirectoryRef>

    <!-- SettingsV2 components -->
    <DirectoryRef Id="SettingsV2InstallFolder" FileSource="$(var.BinX64Dir)Settings\">
      <Component Id="SettingsV2" Guid="4B108DC0-4B2C-4AC4-AAA9-1B2DC8399F7C" Win64="yes">
        <!-- exe -->
        <File Source="$(var.BinX64Dir)Settings\PowerToys.Settings.exe"/>
        <File Source="$(var.BinX64Dir)Settings\Microsoft.PowerToys.Settings.UI.exe"/>
        <!-- dll -->
        <?foreach File in concrt140_app.dll;Microsoft.Bcl.AsyncInterfaces.dll;System.IO.Abstractions.dll;Microsoft.PowerToys.Settings.UI.Lib.dll;PowerToys.Settings.dll;Microsoft.Toolkit.dll;Microsoft.Toolkit.Uwp.dll;Microsoft.Toolkit.Uwp.UI.dll;Microsoft.Toolkit.Win32.UI.XamlHost.dll;Microsoft.Toolkit.Win32.UI.XamlHost.Managed.dll;Microsoft.Toolkit.Wpf.UI.Controls.dll;Microsoft.Toolkit.Wpf.UI.XamlHost.dll;Microsoft.UI.Xaml.dll;Microsoft.Xaml.Interactions.dll;Microsoft.Xaml.Interactivity.dll;msvcp140_1_app.dll;msvcp140_2_app.dll;msvcp140_app.dll;Newtonsoft.Json.dll;PowerToysInterop.dll;System.Runtime.CompilerServices.Unsafe.dll;System.Text.Encodings.Web.dll;System.Text.Json.dll;vcamp140_app.dll;vccorlib140_app.dll;vcomp140_app.dll;vcruntime140_1_app.dll;vcruntime140_app.dll;ManagedTelemetry.dll;ManagedCommon.dll;System.Deployment.dll;System.Windows.Forms.dll;System.Runtime.Serialization.Formatters.Soap.dll?>
          <File Id="SettingsV2_$(var.File)" Source="$(var.BinX64Dir)Settings\$(var.File)" />
        <?endforeach?>
        <!-- json -->
        <File Source="$(var.BinX64Dir)Settings\PowerToys.Settings.deps.json"/>
        <File Source="$(var.BinX64Dir)Settings\PowerToys.Settings.runtimeconfig.json"/>
        <!-- png -->
        <File Id="SettingsV2_NoiseAsset_256x256_PNG.png" Source="$(var.BinX64Dir)Settings\NoiseAsset_256x256_PNG.png"/>
        <!-- pri -->
        <?foreach File in Microsoft.Toolkit.Uwp.pri;Microsoft.Toolkit.Uwp.UI.pri;Microsoft.Toolkit.Win32.UI.XamlHost.pri;Microsoft.UI.Xaml.pri;Microsoft.Xaml.Interactions.pri;Microsoft.Xaml.Interactivity.pri;resources.pri?>
          <File Id="SettingsV2_$(var.File)" Source="$(var.BinX64Dir)Settings\$(var.File)" />
        <?endforeach?>
        <!-- winmd -->
        <File Id="SettingsV2_Microsoft.Toolkit.Win32.UI.XamlHost.winmd" Source="$(var.BinX64Dir)Settings\Microsoft.Toolkit.Win32.UI.XamlHost.winmd"/>
        <File Id="SettingsV2_Microsoft.UI.Xaml.winmd" Source="$(var.BinX64Dir)Settings\Microsoft.UI.Xaml.winmd"/>
        <!-- xbf -->
        <File Id="SettingsV2_App.xbf" Source="$(var.BinX64Dir)Settings\App.xbf"/>
        <!-- xml -->
        <File Id="SettingsV2_Microsoft.PowerToys.Settings.UI.xr.xml" Source="$(var.BinX64Dir)Settings\Microsoft.PowerToys.Settings.UI.xr.xml"/>
        <File Id="SettingsV2_Microsoft.Toolkit.Win32.UI.XamlHost.xml" Source="$(var.BinX64Dir)Settings\Microsoft.Toolkit.Win32.UI.XamlHost.xml"/>
        <!-- VCRuntime -->
        <?foreach File in vcruntime140.dll;vcruntime140_1.dll;concrt140.dll;msvcp140.dll;msvcp140_1.dll;msvcp140_2.dll;msvcp140_codecvt_ids.dll;vccorlib140.dll?>
          <File Id="SettingsV2_$(var.File)" Source="$(var.RepoDir)installer\VCRuntime\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsV2AssetsInstallFolder" FileSource="$(var.BinX64Dir)Settings\Assets">
      <Component Id="SettingsV2Assets" Guid="705B863B-D813-49B9-BAA1-210DA913F765" Win64="yes">
        <?foreach File in Logo.scale-200.png;SplashScreen.png;StoreLogo.scale-100.png?>
          <File Source="$(var.BinX64Dir)Settings\Assets\$(var.File)" />
        <?endforeach?>
        <File Id="SettingsV2_StoreLogo" Source="$(var.BinX64Dir)Settings\Assets\StoreLogo.png" />
        <File Id="Square150x150Logo" Source="$(var.BinX64Dir)Settings\Assets\Square150x150Logo.scale-200.png" />
        <File Id="Square44x44Logo_targetsize_24_altform_unplated" Source="$(var.BinX64Dir)Settings\Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
        <File Id="Wide310x150Logo" Source="$(var.BinX64Dir)Settings\Assets\Wide310x150Logo.scale-200.png" />
        <File Id="Square44x44Logo" Source="$(var.BinX64Dir)Settings\Assets\Square44x44Logo.scale-200.png" />
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsV2AssetsModulesInstallFolder" FileSource="$(var.BinX64Dir)Settings\Assets\Modules">
      <Component Id="SettingsV2AssetsModules" Guid="A0B961A9-77D0-4223-88A9-E3B41BD9C329" Win64="yes">
        <?foreach File in ColorPicker.png;FancyZones.png;ImageResizer.png;KBM.png;PowerLauncher.png;PowerPreview.png;PowerRename.png;PT.png;ShortcutGuide.png;VideoConference.png?>
          <File Source="$(var.BinX64Dir)Settings\Assets\Modules\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsV2OOBEAssetsModulesInstallFolder" FileSource="$(var.BinX64Dir)Settings\Assets\Modules\OOBE">
      <Component Id="SettingsV2OOBEAssetsModules" Guid="E2360A83-6694-4B33-B5F6-641A906359EE" Win64="yes">
        <?foreach File in ColorPicker.gif;FancyZones.gif;FileExplorer.png;ImageResizer.gif;KBM.gif;PowerRename.gif;Run.gif;OOBEShortcutGuide.png;VideoConferenceMute.png;OOBEPTHero.png?>
          <File Source="$(var.BinX64Dir)Settings\Assets\Modules\OOBE\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsV2OOBEAssetsFluentIconsInstallFolder" FileSource="$(var.BinX64Dir)Settings\Assets\FluentIcons">
      <Component Id="SettingsV2OOBEAssetsFluentIcons" Guid="6A380D5A-DA63-45B5-B68F-06D57CDD1B9C" Win64="yes">
        <?foreach File in ColorPicker.png;FancyZones.png;FileExplorerPreview.png;ImageResizer.png;KeyboardManager.png;PowerRename.png;PowerToys.png;PowerToysRun.png;ShortcutGuide.png;VideoConferenceMute.png ?>
          <File Source="$(var.BinX64Dir)Settings\Assets\FluentIcons\FluentIcons$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsV2ControlsInstallFolder" FileSource="$(var.BinX64Dir)Settings\Controls">
      <Component Id="SettingsV2Controls" Guid="05C55C88-B59A-4450-A07C-EB7626E0781A" Win64="yes">
        <?foreach File in HotkeySettingsControl.xbf?>
          <File Id="SettingsV2_Controls_$(var.File)" Source="$(var.BinX64Dir)Settings\Controls\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsV2PropertiesInstallFolder" FileSource="$(var.BinX64Dir)Settings\Properties">
      <Component Id="SettingsV2Properties" Guid="8F910A41-B27B-4289-8FAC-9AB34F070CF6" Win64="yes">
        <?foreach File in Default.rd.xml?>
          <File Id="SettingsV2_Properties_$(var.File)" Source="$(var.BinX64Dir)Settings\Properties\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsV2StylesInstallFolder" FileSource="$(var.BinX64Dir)Settings\Styles">
      <Component Id="SettingsV2Styles" Guid="44B5C0E0-76DA-4604-BB86-FCD27A00EB71" Win64="yes">
        <?foreach File in Page.xbf;TextBlock.xbf;_Colors.xbf;_FontSizes.xbf;_Sizes.xbf;_Thickness.xbf;Button.xbf?>
          <File Id="SettingsV2_Styles_$(var.File)" Source="$(var.BinX64Dir)Settings\Styles\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsV2ViewsInstallFolder" FileSource="$(var.BinX64Dir)Settings\Views">
      <Component Id="SettingsV2Views" Guid="C140BFBA-6370-4F67-862C-5B42660385CD" Win64="yes">
        <?foreach File in FancyZonesPage.xbf;GeneralPage.xbf;ImageResizerPage.xbf;KeyboardManagerPage.xbf;PowerLauncherPage.xbf;PowerPreviewPage.xbf;PowerRenamePage.xbf;ShellPage.xbf;ShortcutGuidePage.xbf?>
          <File Id="SettingsV2_Views_$(var.File)" Source="$(var.BinX64Dir)Settings\Views\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsV2XamlAssetsInstallFolder" FileSource="$(var.BinX64Dir)Settings\Microsoft.UI.Xaml\Assets">
      <Component Id="SettingsV2XamlAssets" Guid="98A136DB-C1BD-42B1-9AB4-0E16F0ECE86A" Win64="yes">
        <?foreach File in NoiseAsset_256X256_PNG.png?>
          <File Id="SettingsV2_XamlAssets_$(var.File)" Source="$(var.BinX64Dir)Settings\Microsoft.UI.Xaml\Assets\$(var.File)" />
        <?endforeach?>
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="SettingsHtmlInstallFolder" FileSource="$(var.RepoDir)\settings\settings-html\">
      <Component Id="settings_html" Guid="87881A99-E917-4B0D-B1D8-5C6EB9709F96" Win64="yes">
        <File Source="$(var.RepoDir)\src\settings\settings-html\index.html" KeyPath="yes" />
      </Component>
      <Component Id="settings_dark_html" Guid="855866C7-2F13-4B08-B5C1-B507354C2760" Win64="yes">
        <File Source="$(var.RepoDir)\src\settings\settings-html\index-dark.html" KeyPath="yes" />
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="SettingsHtmlDistInstallFolder" FileSource="$(var.RepoDir)\settings\settings-html\dist\">
      <Component Id="settings_js_bundle" Guid="9EF539C1-2F50-421E-B074-C58ED3A9785C" Win64="yes">
        <File Source="$(var.RepoDir)\src\settings\settings-html\dist\bundle.js" KeyPath="yes" />
      </Component>
      <Component Id="settings_css" Guid="9B8EBF56-A7A7-4D83-B53C-75A692E2F95A" Win64="yes">
        <File Source="$(var.RepoDir)\src\settings\settings-html\dist\layout.css" KeyPath="yes" />
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="DesktopFolder">
      <Component Id="DesktopShortcut" Guid="87321F2B-CC48-4326-881E-9C62CC260DC8">
        <Condition>INSTALLDESKTOPSHORTCUT</Condition>
        <!-- DesktopShortcutId is implicitly installed in HKCU, so WIX won't allow changing this reg value to HKLM. -->
        <RegistryValue Root="HKCU"
                        Key="Software\[Manufacturer]\[ProductName]"
                        Name="desktopshorcutinstalled"
                        Type="integer"
                        Value="1"
                        KeyPath="yes"/>
        <Shortcut Id="DesktopShortcutId"
                  Name="PowerToys (Preview)"
                  Description="PowerToys - Windows system utilities to maximize productivity"
                  Target="[!PowerToys.exe]"
                  WorkingDirectory="INSTALLFOLDER"
                  Icon="powertoys.exe"
                  Directory="DesktopFolder"/>
      </Component>
    </DirectoryRef>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="CoreComponents" Directory="INSTALLFOLDER">
      <ComponentRef Id="powertoys_exe" />
      <ComponentRef Id="PowerToysStartMenuShortcut"/>
      <ComponentRef Id="BackgroundActivator_dll" />
      <ComponentRef Id="action_runner_exe" />
      <ComponentRef Id="powertoys_toast_clsid" />
      <ComponentRef Id="License_rtf" />
      <ComponentRef Id="Notice_md" />
      <ComponentRef Id="powertoysinterop_dll" />
      <ComponentRef Id="vcredist_dlls" />
      <ComponentRef Id="PowerToysSvgs" />
      <ComponentRef Id="Module_ShortcutGuide" />
      <ComponentRef Id="Module_VideoConference" />
      <ComponentRef Id="Module_VideoConferenceIcons" />
      <ComponentRef Id="Module_FancyZones" />
      <ComponentRef Id="DesktopShortcut" />
      <ComponentRef Id="Module_PowerRename" />
      <ComponentRef Id="Module_ImageResizer" />
      <ComponentRef Id="Module_ImageResizer_Registry" />
      <ComponentRef Id="Module_PowerPreview" />
      <ComponentRef Id="Module_PowerPreview_PerUserRegistry" />
      <ComponentRef Id="Module_KeyboardManager" />
      <ComponentRef Id="Module_ColorPicker" />
      <ComponentRef Id="Module_ColorPicker_Resources"/>
      <ComponentRef Id="SettingsV2" />
      <ComponentRef Id="SettingsV2Assets" />
      <ComponentRef Id="SettingsV2AssetsModules" />
      <ComponentRef Id="SettingsV2OOBEAssetsFluentIcons" />
      <ComponentRef Id="SettingsV2OOBEAssetsModules" />
      <ComponentRef Id="SettingsV2Controls" />
      <ComponentRef Id="SettingsV2Properties" />
      <ComponentRef Id="SettingsV2Styles" />
      <ComponentRef Id="SettingsV2Views" />
      <ComponentRef Id="SettingsV2XamlAssets" />
      <ComponentRef Id="settings_exe" />
      <ComponentRef Id="settings_html" />
      <ComponentRef Id="settings_dark_html" />
      <ComponentRef Id="settings_js_bundle" />
      <ComponentRef Id="settings_css" />
    </ComponentGroup>
    <ComponentGroup Id="ToolComponents" Directory="ToolsFolder">
      <ComponentRef Id="BugReportTool_exe" />
      <ComponentRef Id="WebcamReportTool_exe" />
    </ComponentGroup>
  </Fragment>

  <!-- Languages for localization on build farm -->
  <?define LocLanguageList = cs;de;es;fr;hu;it;ja;ko;nl;pl;pt-BR;pt-PT;ru;sv;tr;zh-Hans;zh-Hant?>

  <Fragment>
    <!-- Resource directories should be added only if the installer is built on the build farm -->
    <?ifdef env.IsPipeline?>
        <?foreach ParentDirectory in LauncherInstallFolder;FancyZonesInstallFolder;ImageResizerInstallFolder;ColorPickerInstallFolder;FileExplorerPreviewInstallFolder;CalculatorPluginFolder;FolderPluginFolder;ProgramPluginFolder;ShellPluginFolder;IndexerPluginFolder;UriPluginFolder;WindowWalkerPluginFolder;RegistryPluginFolder;VSCodeWorkspacesPluginFolder;ServicePluginFolder?>
            <DirectoryRef Id="$(var.ParentDirectory)">
                <!-- Resource file directories -->
                <?foreach Language in $(var.LocLanguageList)?>
                    <!--NB: Ids can't contain hyphens-->
                    <?if $(var.Language) = pt-BR?>
                    <?define IdSafeLanguage = pt_BR?>
                    <?elseif $(var.Language) = pt-PT?>
                    <?define IdSafeLanguage = pt_PT?>
                    <?elseif $(var.Language) = zh-Hans?>
                    <?define IdSafeLanguage = zh_Hans?>
                    <?elseif $(var.Language) = zh-Hant?>
                    <?define IdSafeLanguage = zh_Hant?>
                    <?else?>
                    <?define IdSafeLanguage = $(var.Language)?>
                    <?endif?>
                    <Directory Id="Resource$(var.IdSafeLanguage)$(var.ParentDirectory)" Name="$(var.Language)" />
                    <?undef IdSafeLanguage?>
                <?endforeach?>
            </DirectoryRef>
        <?endforeach?>
    <?endif?>
    <ComponentGroup Id="ResourcesComponents">
        <!-- Resource components should be added only if the installer is built on the build farm -->
        <?ifdef env.IsPipeline?>
            <!-- Components for adding resource files -->
            <?foreach Language in $(var.LocLanguageList)?>
                <!--NB: Ids can't contain hyphens-->
                <?if $(var.Language) = pt-BR?>
                    <?define IdSafeLanguage = pt_BR?>
                <?elseif $(var.Language) = pt-PT?>
                    <?define IdSafeLanguage = pt_PT?>
                <?elseif $(var.Language) = zh-Hans?>
                    <?define IdSafeLanguage = zh_Hans?>
                <?elseif $(var.Language) = zh-Hant?>
                    <?define IdSafeLanguage = zh_Hant?>
                <?else?>
                    <?define IdSafeLanguage = $(var.Language)?>
                <?endif?>
                <Component Id="Launcher_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)LauncherInstallFolder">
                    <File Id="Launcher_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\$(var.Language)\PowerLauncher.resources.dll" />
                </Component>
                <Component Id="FancyZonesEditor_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)FancyZonesInstallFolder">
                    <File Id="FancyZonesEditor_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\$(var.FancyZonesProjectName)\$(var.Language)\FancyZonesEditor.resources.dll" />
                </Component>
                <Component Id="ImageResizer_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)ImageResizerInstallFolder">
                    <File Id="ImageResizer_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\$(var.ImageResizerProjectName)\$(var.Language)\ImageResizer.resources.dll" />
                </Component>
                <Component Id="ColorPicker_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)ColorPickerInstallFolder">
                    <File Id="ColorPicker_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\$(var.ColorPickerProjectName)\$(var.Language)\ColorPickerUI.resources.dll" />
                </Component>
                <Component Id="MarkdownPreviewHandler_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)FileExplorerPreviewInstallFolder">
                    <File Id="MarkdownPreviewHandler_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\FileExplorerPreview\$(var.Language)\MarkdownPreviewHandler.resources.dll" />
                </Component>
                <Component Id="SVGPreviewHandler_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)FileExplorerPreviewInstallFolder">
                    <File Id="SVGPreviewHandler_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\FileExplorerPreview\$(var.Language)\SvgPreviewHandler.resources.dll" />
                </Component>
                <!-- Launcher plugin resources -->
                <Component Id="Launcher_Calculator_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)CalculatorPluginFolder">
                    <File Id="Launcher_Calculator_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Calculator\$(var.Language)\Microsoft.PowerToys.Run.Plugin.Calculator.resources.dll" />
                </Component>
                <Component Id="Launcher_Folder_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)FolderPluginFolder">
                    <File Id="Launcher_Folder_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Folder\$(var.Language)\Microsoft.Plugin.Folder.resources.dll" />
                </Component>
                <Component Id="Launcher_Program_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)ProgramPluginFolder">
                    <File Id="Launcher_Program_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Program\$(var.Language)\Microsoft.Plugin.Program.resources.dll" />
                </Component>
                <Component Id="Launcher_Shell_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)ShellPluginFolder">
                    <File Id="Launcher_Shell_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Shell\$(var.Language)\Microsoft.Plugin.Shell.resources.dll" />
                </Component>
                <Component Id="Launcher_Indexer_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)IndexerPluginFolder">
                    <File Id="Launcher_Indexer_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Indexer\$(var.Language)\Microsoft.Plugin.Indexer.resources.dll" />
                </Component>
                <Component Id="Launcher_Uri_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)UriPluginFolder">
                    <File Id="Launcher_Uri_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Uri\$(var.Language)\Microsoft.Plugin.Uri.resources.dll" />
                </Component>
                <Component Id="Launcher_VSCodeWorkspaces_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)VSCodeWorkspacesPluginFolder">
                  <File Id="Launcher_VSCodeWorkspaces_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\VSCodeWorkspaces\$(var.Language)\Community.PowerToys.Run.Plugin.VSCodeWorkspaces.resources.dll" />
                </Component>
                <Component Id="Launcher_WindowWalker_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)WindowWalkerPluginFolder">
                    <File Id="Launcher_WindowWalker_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.WindowWalker\$(var.Language)\Microsoft.Plugin.WindowWalker.resources.dll" />
                </Component>
                <Component Id="Launcher_Registry_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)RegistryPluginFolder">
                    <File Id="Launcher_Registry_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.Registry\$(var.Language)\Microsoft.PowerToys.Run.Plugin.Registry.resources.dll" />
                </Component>
                <Component Id="Launcher_Service_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)ServicePluginFolder">
                    <File Id="Launcher_Service_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Service\$(var.Language)\Microsoft.PowerToys.Run.Plugin.Service.resources.dll" />
                </Component>
                <?undef IdSafeLanguage?>
            <?endforeach?>
        <?endif?>
    </ComponentGroup>
  </Fragment>
  <Fragment>
    <ComponentGroup Id="LauncherComponents">
      <Component Id="launcherShortcutComponent" Directory="LauncherInstallFolder" Guid="8824006B-CD06-4D87-8AC4-1B40C71DB4D7">
        <!-- Toast Notification AUMID -->
        <RegistryKey Root="HKLM" Key="SOFTWARE\Classes\AppUserModelId\PowerToysRun">
          <RegistryValue Type="string" Name="DisplayName" Value="PowerToys Run" />
          <RegistryValue Type="string" Name="IconUri" Value="[LauncherImagesFolder]RunAsset.ico" />
        </RegistryKey>
      </Component>

      <Component Id="launcherInstallComponent" Directory="LauncherInstallFolder" Guid="5E688DB4-C522-4268-BA54-ED1CDFFE9DB6">
        <File Source="$(var.BinX64Dir)modules\Launcher\Microsoft.Launcher.dll" />
        <?foreach File in concrt140_app.dll;ICSharpCode.SharpZipLib.dll;JetBrains.Annotations.dll;Mages.Core.dll;Microsoft.Search.Interop.dll;Mono.Cecil.dll;Mono.Cecil.Mdb.dll;Mono.Cecil.Pdb.dll;Mono.Cecil.Rocks.dll;msvcp140_1_app.dll;msvcp140_2_app.dll;msvcp140_app.dll;Newtonsoft.Json.dll;NLog.dll;NLog.Extensions.Logging.dll;PowerLauncher.deps.json;PowerLauncher.dll;PowerLauncher.exe;Microsoft.Xaml.Behaviors.dll;System.Text.Json.dll;PowerLauncher.runtimeconfig.json;System.Data.OleDb.dll;vcamp140_app.dll;vccorlib140_app.dll;vcomp140_app.dll;vcruntime140_1_app.dll;vcruntime140_app.dll;Wox.Infrastructure.dll;Wox.Plugin.dll;PowerToysInterop.dll;ManagedTelemetry.dll;PowerLauncher.Telemetry.dll;Microsoft.Extensions.Configuration.Abstractions.dll;Microsoft.Extensions.Configuration.Binder.dll;Microsoft.Extensions.Configuration.dll;Microsoft.Extensions.DependencyInjection.Abstractions.dll;Microsoft.Extensions.DependencyInjection.dll;Microsoft.Extensions.Logging.Abstractions.dll;Microsoft.Extensions.Logging.dll;Microsoft.Extensions.Options.dll;Microsoft.Extensions.Primitives.dll;ControlzEx.dll;ManagedCommon.dll;System.IO.Abstractions.dll;Microsoft.PowerToys.Common.UI.dll;System.ServiceProcess.ServiceController.dll;Microsoft.Toolkit.Uwp.Notifications.dll;ModernWpf.Controls.dll;ModernWpf.dll?>
          <File Id="File_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\$(var.File)" />
        <?endforeach?>
        <File Source="$(var.BinX64Dir)Settings\Microsoft.PowerToys.Settings.UI.Lib.dll" />
        <!-- VCRuntime -->
        <?foreach File in vcruntime140.dll;vcruntime140_1.dll;concrt140.dll;msvcp140.dll;msvcp140_1.dll;msvcp140_2.dll;msvcp140_codecvt_ids.dll;vccorlib140.dll?>
          <File Id="File_$(var.File)" Source="$(var.RepoDir)installer\VCRuntime\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="launcherImagesComponent" Directory="LauncherImagesFolder" Guid="D254220C-1DD9-4C74-8810-1AAB2F940DE8">
        <?foreach File in app.dark.png;app.light.png;app_error.dark.png;app_error.light.png;Browser.png;calculator.png;cancel.png;close.png;cmd.png;color.png;copy.png;down.png;EXE.png;file.png;find.png;folder.png;history.png;image.png;Link.png;lock.png;logoff.png;ok.png;open.png;plugin.png;recyclebin.png;restart.png;search.png;settings.png;shutdown.png;sleep.png;up.png;update.png;warning.png;RunAsset.ico?>
          <File Id="File_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Images\$(var.File)" />
        <?endforeach?>
        <File Source="$(var.BinX64Dir)modules\launcher\Images\New Message.png" />
      </Component>

      <!-- Calculator Plugin -->
      <Component Id="calculatorComponent" Directory="CalculatorPluginFolder" Guid="19DE1022-583C-4969-9AFC-D43CB944003D">
        <?foreach File in plugin.json;Microsoft.PowerToys.Run.Plugin.Calculator.deps.json;Microsoft.PowerToys.Run.Plugin.Calculator.dll;ManagedTelemetry.dll?>
          <File Id="Calculator_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Calculator\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="calculatorImagesComponent" Directory="CalculatorImagesFolder" Guid="07EC9232-CF9A-4CDB-8D8E-E79DC75096C0">
        <File Id="calculatorPluginImg_calculator_light" Source="$(var.BinX64Dir)modules\launcher\Plugins\Calculator\Images\calculator.light.png" />
        <File Id="calculatorPluginImg_calculator_dark" Source="$(var.BinX64Dir)modules\launcher\Plugins\Calculator\Images\calculator.dark.png" />
      </Component>

      <!-- Folder Plugin -->
      <Component Id="FolderComponent" Directory="FolderPluginFolder" Guid="453D6C29-8F0D-46EC-B210-82E6AF547039">
        <?foreach File in plugin.json;Microsoft.Plugin.Folder.deps.json;Microsoft.Plugin.Folder.dll;ManagedTelemetry.dll?>
        <File Id="Folder_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Folder\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="FolderImagesComponent" Directory="FolderPluginImagesFolder" Guid="6C5226EB-E312-4768-B4D1-B1D3ACFCCBDF">
        <?foreach File in copy.dark.png;copy.light.png;delete.dark.png;delete.light.png;file.dark.png;file.light.png;folder.dark.png;folder.light.png;user.dark.png;user.light.png;Warning.dark.png;Warning.light.png?>
          <File Id="FolderPlugin_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Folder\Images\$(var.File)" />
        <?endforeach?>
      </Component>

      <!-- Program Plugin -->
      <Component Id="ProgramComponent" Directory="ProgramPluginFolder" Guid="3C5CA6E6-3D36-4F4E-B40E-38AA5E5CB799">
        <?foreach File in plugin.json;Microsoft.Plugin.Program.deps.json;Microsoft.Plugin.Program.dll;ManagedTelemetry.dll?>
          <File Id="Program_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Program\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="ProgramImagesComponent" Directory="ProgramImagesFolder" Guid="30D357F5-406F-47D1-BEFE-6022746469B4">
        <?foreach File in app.dark.png;app.light.png;disable.light.png;disable.dark.png;folder.light.png;folder.dark.png;shell.light.png;shell.dark.png;user.light.png;user.dark.png?>
          <File Id="Program_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Program\Images\$(var.File)" />
        <?endforeach?>
      </Component>

      <!-- Shell Plugin -->
      <Component Id="ShellComponent" Directory="ShellPluginFolder" Guid="6D3D7294-1804-47C9-83E5-47A8867F3801">
        <?foreach File in plugin.json;Microsoft.Plugin.Shell.deps.json;Microsoft.Plugin.Shell.dll;ManagedTelemetry.dll?>
          <File Id="Shell_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Shell\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="ShellImagesComponent" Directory="ShellImagesFolder" Guid="15B5DBAE-E7C1-4BF7-A29E-6CE76242F8F4">
       <?foreach File in shell.light.png;shell.dark.png;user.light.png;user.dark.png?>
          <File Id="Shell_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Shell\Images\$(var.File)" />
        <?endforeach?>
      </Component>

      <!-- Indexer Plugin -->
      <Component Id="IndexerComponent" Directory="IndexerPluginFolder" Guid="FEA9816A-B4F7-42CC-99AF-B05F3E7F7EBF">
        <?foreach File in Microsoft.Plugin.Indexer.deps.json;Microsoft.Plugin.Indexer.dll;plugin.json;ManagedTelemetry.dll?>
          <File Id="Indexer_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Indexer\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="IndexerImagesComponent" Directory="IndexerImagesFolder" Guid="DB2E8D49-D104-425B-9616-952AC8CAB676">
        <?foreach File in indexer.dark.png;indexer.light.png;Warning.light.png;Warning.dark.png?>
          <File Id="Indexer_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Indexer\Images\$(var.File)" />
        <?endforeach?>
      </Component>

      <!-- Uri Plugin -->
      <Component Id="UriComponent" Directory="UriPluginFolder" Guid="C7DC8F88-554C-4375-9510-9435399B5D3D">
        <?foreach File in plugin.json;Microsoft.Plugin.Uri.deps.json;Microsoft.Plugin.Uri.dll;ManagedTelemetry.dll?>
          <File Id="Uri_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Uri\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="UriImagesComponent" Directory="UriImagesFolder" Guid="8C9C1634-28C8-45C4-A8EA-8D4C9B4810D0">
        <File Id="UriDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Uri\Images\Uri.dark.png" />
        <File Id="UriLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.Uri\Images\Uri.light.png" />
      </Component>

      <!-- VSCodeWorkspaces Plugin -->
      <Component Id="VSCodeWorkspacesComponent" Directory="VSCodeWorkspacesPluginFolder" Guid="78363DBD-7E38-4D5F-8987-9963DF609B94">
        <File Id="VSCodeWorkspaceFolder_deps" Source="$(var.BinX64Dir)modules\launcher\Plugins\VSCodeWorkspaces\Community.PowerToys.Run.Plugin.VSCodeWorkspaces.deps.json" />
        <?foreach File in plugin.json;Community.PowerToys.Run.Plugin.VSCodeWorkspaces.dll?>
          <File Id="VSCodeWorkspaces_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\VSCodeWorkspaces\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="VSCodeWorkspacesImagesComponent" Directory="VSCodeWorkspaceImagesFolder" Guid="6F3C0CF1-7024-4333-BFA1-850D340AEE69">
        <File Id="VSCodeWorkspaceCodeLight" Source="$(var.BinX64Dir)modules\launcher\Plugins\VSCodeWorkspaces\Images\code-light.png" />
        <File Id="VSCodeWorkspaceCodeDark" Source="$(var.BinX64Dir)modules\launcher\Plugins\VSCodeWorkspaces\Images\code-dark.png" />
        <File Id="VSCodeWorkspaceFolder" Source="$(var.BinX64Dir)modules\launcher\Plugins\VSCodeWorkspaces\Images\folder.png" />
        <File Id="VSCodeWorkspaceRemote" Source="$(var.BinX64Dir)modules\launcher\Plugins\VSCodeWorkspaces\Images\monitor.png" />
      </Component>

      <!-- WindowWalker Plugin -->  
      <Component Id="WindowWalkerComponent" Directory="WindowWalkerPluginFolder" Guid="EB1391C9-B701-421F-80FC-ABB2FEDFAD19">
        <?foreach File in plugin.json;Microsoft.Plugin.WindowWalker.deps.json;Microsoft.Plugin.WindowWalker.dll;ManagedTelemetry.dll?>
          <File Id="WindowWalker_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.WindowWalker\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="WindowWalkerImagesComponent" Directory="WindowWalkerImagesFolder" Guid="3944A7F5-77F4-4979-9911-EDE709B2F509">
          <File Id="WindowWalkerDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.WindowWalker\Images\windowwalker.dark.png" />
          <File Id="WindowWalkerLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.Plugin.WindowWalker\Images\windowwalker.light.png" />
      </Component>

      <!-- Registry Plugin -->
      <Component Id="RegistryComponent" Directory="RegistryPluginFolder" Guid="186FDFDC-12F1-4221-BEF6-DE6763F54B18">
        <?foreach File in plugin.json;Microsoft.PowerToys.Run.Plugin.Registry.deps.json;Microsoft.PowerToys.Run.Plugin.Registry.dll;ManagedTelemetry.dll?>
          <File Id="Registry_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.Registry\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="RegistryImagesComponent" Directory="RegistryImagesFolder" Guid="2E2C91A2-9F53-40C6-BBE9-E6FD6D6E94EB">
          <File Id="RegistryDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.Registry\Images\reg.dark.png" />
          <File Id="RegistryLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.Registry\Images\reg.light.png" />
      </Component>

      <!-- Service Plugin -->
      <Component Id="ServiceComponent" Directory="ServicePluginFolder" Guid="66245D20-0078-4136-8A34-4A282FB894D5">
        <?foreach File in plugin.json;Microsoft.PowerToys.Run.Plugin.Service.deps.json;Microsoft.PowerToys.Run.Plugin.Service.dll?>
          <File Id="Service_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\Service\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="ServiceImagesComponent" Directory="ServiceImagesFolder" Guid="5846BF01-5BCB-47DC-9472-0E478A41B1AE">
        <File Id="ServiceDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Service\Images\service.dark.png" />
        <File Id="ServiceLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Service\Images\service.light.png" />
      </Component>

      <!-- System Plugin -->
      <Component Id="SystemComponent" Directory="SystemPluginFolder" Guid="05894C7C-7207-4669-ADB9-E02DD9DB4CCD">
        <?foreach File in plugin.json;Microsoft.PowerToys.Run.Plugin.System.deps.json;Microsoft.PowerToys.Run.Plugin.System.dll?>
          <File Id="System_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\$(var.File)" />
        <?endforeach?>
      </Component>
      <Component Id="SystemImagesComponent" Directory="SystemImagesFolder" Guid="8886318A-0CD8-4990-85D1-50D44D5ADA21">
        <File Id="SystemLockDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\lock.dark.png" />
        <File Id="SystemLockLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\lock.light.png" />
        <File Id="SystemLogoffDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\logoff.dark.png" />
        <File Id="SystemLogoffLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\logoff.light.png" />
        <File Id="SystemRecyclebinDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\recyclebin.dark.png" />
        <File Id="SystemRecyclebinLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\recyclebin.light.png" />
        <File Id="SystemRestartDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\restart.dark.png" />
        <File Id="SystemRestartLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\restart.light.png" />
        <File Id="SystemShutdownDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\shutdown.dark.png" />
        <File Id="SystemShutdownLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\shutdown.light.png" />
        <File Id="SystemSleepDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\sleep.dark.png" />
        <File Id="SystemSleepLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\System\Images\sleep.light.png" />
      </Component>

    </ComponentGroup>
  </Fragment>
</Wix>
