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

  <?define RepoDir="$(var.ProjectDir)..\..\" ?>
  <?define BinX64Dir="$(var.RepoDir)x64\$(var.Configuration)\" ?>
  <Product Id="*"
       Name="PowerToys (Preview)"
       Language="1033"
       Version="$(var.Version)"
       Manufacturer="Microsoft"
       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.11.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" />
    </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="DoAction"
            Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and 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)\Bitmaps\banner.bmp" />
    <WixVariable Id="WixUIDialogBmp" Value="$(var.ProjectDir)\Bitmaps\dialog.bmp" />
    <WixVariable Id="WixUILicenseRtf" Value="$(var.RepoDir)\installer\License.rtf" />
    <Property Id="INSTALLSTARTMENUSHORTCUT" Value="1"/>
    <Property Id="CREATESCHEDULEDTASK" Value="1"/>
    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"/>
    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch PowerToys" />
    <Property Id="WixShellExecTarget" Value="[#PowerToys.exe]" />
    <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

    <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>
    </InstallExecuteSequence>

    <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" />
    <!-- Restart explorer.exe if we detect existing PowerRenameExt.dll or ImageResizerExt.dll installation -->
    <util:CloseApplication Target="explorer.exe" RebootPrompt="no" TerminateProcess="0">
      EXISTINGPOWERRENAMEEXTPATH OR EXISTINGIMAGERESIZERPATH
    </util:CloseApplication>
    <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="ModulesInstallFolder" Name="modules">
            <!-- Resource file directories -->
            <?foreach Language in ar;bg;ca;cs;de;es;eu-ES;fr;he;hu;it;nb-NO;nl;pl;pt-BR;ru;sk;tr;zh-Hans?>
              <!--NB: Ids can't contain hyphens-->
              <?if $(var.Language) = eu-ES?>
                <?define IdSafeLanguage = eu_ES?>
              <?elseif $(var.Language) = nb-NO?>
                <?define IdSafeLanguage = nb_NO?>
              <?elseif $(var.Language) = pt-BR?>
                <?define IdSafeLanguage = pt_BR?>
              <?elseif $(var.Language) = zh-Hans?>
                <?define IdSafeLanguage = zh_Hans?>
              <?else?>
                <?define IdSafeLanguage = $(var.Language)?>
              <?endif?>
              <Directory Id="Resources$(var.IdSafeLanguage)Folder" Name="$(var.Language)" />
              <?undef IdSafeLanguage?>
            <?endforeach?>
          </Directory>
          <Directory Id="SettingsHtmlInstallFolder" Name="settings-html">
            <Directory Id="SettingsHtmlDistInstallFolder" Name="dist"/>
          </Directory>
        </Directory>
      </Directory>
      <Directory Id="ProgramMenuFolder"/>
      <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">
          <Shortcut Id="ApplicationStartMenuShortcut"
                    Name="PowerToys (Preview)"
                    Description="PowerToys - Windows system utilities to maximize productivity"
                    Directory="ProgramMenuFolder"
                    Icon="powertoys.exe"
                    IconIndex="0"
                    Advertise="yes">
            <ShortcutProperty Key="System.AppUserModel.ID" Value="Microsoft.PowerToysWin32"/>
            <ShortcutProperty Key="System.AppUserModel.ToastActivatorCLSID" Value="{DD5CACDA-7C2E-4997-A62A-04A597B58F76}"/>
          </Shortcut>
        </File>

        <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="notifications_dll" Guid="23B25EE4-BCA2-45DF-BBCD-82FBDF01C5AB" Win64="yes">
        <File Id="Notifications.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>
    </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="ModulesInstallFolder" FileSource="$(var.BinX64Dir)\modules\">
      <Component Id="Module_ShortcutGuide" Guid="CBD0AC09-91D3-428E-B2B3-05745ADF3473" Win64="yes">
        <File Source="$(var.BinX64Dir)\modules\shortcut_guide.dll" KeyPath="yes" />
      </Component>
      <Component Id="Module_FancyZones" Guid="C6B5272E-6ED4-4B80-B0E7-2FF0355D8CF4" Win64="yes">
        <File Source="$(var.BinX64Dir)\modules\fancyzones.dll" KeyPath="yes" />
        <File Source="$(var.BinX64Dir)\modules\FancyZonesEditor.exe" >
          <netfx:NativeImage Id="FancyZonesEditor.exe" Platform="64bit" Priority="0" />
        </File>
        <File Source="$(var.BinX64Dir)\modules\ControlzEx.dll" />
        <File Source="$(var.BinX64Dir)\modules\MahApps.Metro.dll" />
        <File Source="$(var.BinX64Dir)\modules\Microsoft.Xaml.Behaviors.dll" />
        <File Source="$(var.BinX64Dir)\modules\FancyZonesEditor.exe.config" />
        <File Source="$(var.BinX64Dir)\modules\Microsoft.Bcl.AsyncInterfaces.dll" />
        <File Source="$(var.BinX64Dir)\modules\System.Buffers.dll" />
        <File Source="$(var.BinX64Dir)\modules\System.Memory.dll" />
        <File Source="$(var.BinX64Dir)\modules\System.Numerics.Vectors.dll" />
        <File Source="$(var.BinX64Dir)\modules\System.Runtime.CompilerServices.Unsafe.dll" />
        <File Source="$(var.BinX64Dir)\modules\System.Text.Encodings.Web.dll" />
        <File Source="$(var.BinX64Dir)\modules\System.Text.Json.dll" />
        <File Source="$(var.BinX64Dir)\modules\System.Threading.Tasks.Extensions.dll" />
        <File Source="$(var.BinX64Dir)\modules\System.ValueTuple.dll" />
      </Component>
      <Component Id="Module_PowerRename" Guid="E4401D08-27FE-4F96-BA17-0C61FD79E684" Win64="yes">
        <File Source="$(var.BinX64Dir)\modules\PowerRenameExt.dll" KeyPath="yes" />
        <RegistryKey Root="HKCR" Key="CLSID\{0440049F-D1DC-4E46-B27B-98393D79486B}">
          <RegistryValue Type="string" Value="PowerRename Shell Extension" />
          <RegistryValue Type="string" Key="InprocServer32" Value="[ModulesInstallFolder]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>
      
      <Component Id="Module_WindowWalker" Guid="0F96981C-5D36-4467-9515-71FB0CE72F6F" Win64="yes">
        <File Source="$(var.BinX64Dir)\modules\WindowWalker.exe" />
        <File Source="$(var.BinX64Dir)\modules\WindowWalker.dll" />
        <File Source="$(var.BinX64Dir)\modules\MaterialDesignColors.dll" />
        <File Source="$(var.BinX64Dir)\modules\MaterialDesignThemes.Wpf.dll" />
      </Component>

      <Component Id="Module_ImageResizer" Guid="96E63289-759C-4A73-A56B-EE7429932F72" Win64="yes">
        <File Source="$(var.BinX64Dir)\modules\ImageResizer.exe">
          <netfx:NativeImage Id="ImageResizer.exe" Platform="all" Priority="0" />
        </File>
        <File Source="$(var.BinX64Dir)\modules\GalaSoft.MvvmLight.dll" />
        <File Source="$(var.BinX64Dir)\modules\GalaSoft.MvvmLight.Platform.dll" />
        <File Source="$(var.BinX64Dir)\modules\GalaSoft.MvvmLight.Extras.dll" />
        <File Source="$(var.BinX64Dir)\modules\System.Windows.Interactivity.dll">
          <!-- NB: Needed since it's only referenced in XAML. -->
          <netfx:NativeImage Id="Interactivity" Platform="all" Priority="0"/>
        </File>
        <File Source="$(var.BinX64Dir)\modules\Newtonsoft.Json.dll" />
        <File Source="$(var.BinX64Dir)\modules\ImageResizerExt.dll" KeyPath="yes" />
      </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="[ModulesInstallFolder]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>
      <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\powerpreview.dll" KeyPath="yes" />
        <!-- File to include common library used by preview handlers -->
        <File Source="$(var.BinX64Dir)\modules\PreviewHandlerCommon.dll" />
        <!-- File to include dll for Svg Preview Handler -->
        <File Source="$(var.BinX64Dir)\modules\SvgPreviewHandler.dll" />
        <!-- Files to include dll's for Markdown Preview Handler and it's dependencies -->
        <File Source="$(var.BinX64Dir)\modules\MarkdownPreviewHandler.dll" />
        <File Source="$(var.BinX64Dir)\modules\Markdig.Signed.dll" />
        <File Source="$(var.BinX64Dir)\modules\HtmlAgilityPack.dll" />
      </Component>
      <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="SvgPreviewHandler.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="mscoree.dll" />
          <RegistryValue Type="string" Key="InprocServer32" Name="Assembly" Value="SvgPreviewHandler, Version=$(var.Version).0, Culture=neutral" />
          <RegistryValue Type="string" Key="InprocServer32" Name="Class" Value="SvgPreviewHandler.SvgPreviewHandler" />
          <RegistryValue Type="string" Key="InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" />
          <RegistryValue Type="string" Key="InprocServer32" Name="ThreadingModel" Value="Both" />
          <RegistryValue Type="string" Key="InprocServer32" Name="CodeBase" Value="file:///[ModulesInstallFolder]SvgPreviewHandler.dll" />
          <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="SvgPreviewHandler.SvgPreviewHandler" />
          <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="RuntimeVersion" Value="v4.0.30319" />
          <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="CodeBase" Value="file:///[ModulesInstallFolder]SvgPreviewHandler.dll" />
        </RegistryKey>
        <!-- Registry Key for Class Registration of Markdown Preview Handler -->
        <RegistryKey Root="HKCR" Key="CLSID\{45769bcc-e8fd-42d0-947e-02beef77a1f5}">
          <RegistryValue Type="string" Value="MarkdownPreviewHandler.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="mscoree.dll" />
          <RegistryValue Type="string" Key="InprocServer32" Name="Assembly" Value="MarkdownPreviewHandler, Version=$(var.Version).0, Culture=neutral" />
          <RegistryValue Type="string" Key="InprocServer32" Name="Class" Value="MarkdownPreviewHandler.MarkdownPreviewHandler" />
          <RegistryValue Type="string" Key="InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" />
          <RegistryValue Type="string" Key="InprocServer32" Name="ThreadingModel" Value="Both" />
          <RegistryValue Type="string" Key="InprocServer32" Name="CodeBase" Value="file:///[ModulesInstallFolder]MarkdownPreviewHandler.dll" />
          <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="MarkdownPreviewHandler.MarkdownPreviewHandler" />
          <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="RuntimeVersion" Value="v4.0.30319" />
          <RegistryValue Type="string" Key="InprocServer32\$(var.Version).0" Name="CodeBase" Value="file:///[ModulesInstallFolder]MarkdownPreviewHandler.dll" />
        </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 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>
      </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>
    </DirectoryRef>

    <DirectoryRef Id="DesktopFolder">
      <Component Id="DesktopShortcut" Guid="87321F2B-CC48-4326-881E-9C62CC260DC8">
        <Condition>INSTALLDESKTOPSHORTCUT</Condition>
        <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="notifications_dll" />
      <ComponentRef Id="action_runner_exe" />
      <ComponentRef Id="powertoys_toast_clsid" />
      <ComponentRef Id="License_rtf" />
      <ComponentRef Id="PowerToysSvgs" />
      <ComponentRef Id="Module_ShortcutGuide" />
      <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_WindowWalker" />
      <ComponentRef Id="settings_exe" />
      <ComponentRef Id="settings_html" />
      <ComponentRef Id="settings_dark_html" />
      <ComponentRef Id="settings_js_bundle" />
    </ComponentGroup>
  </Fragment>
  <Fragment>
    <ComponentGroup Id="ResourcesComponents">
      <!-- Components for adding resource files -->
      <?foreach Language in ar;bg;ca;cs;de;es;eu-ES;fr;he;hu;it;nb-NO;nl;pl;pt-BR;ru;sk;tr;zh-Hans?>
        <!--NB: Ids can't contain hyphens-->
        <?if $(var.Language) = eu-ES?>
          <?define IdSafeLanguage = eu_ES?>
        <?elseif $(var.Language) = nb-NO?>
          <?define IdSafeLanguage = nb_NO?>
        <?elseif $(var.Language) = pt-BR?>
          <?define IdSafeLanguage = pt_BR?>
        <?elseif $(var.Language) = zh-Hans?>
          <?define IdSafeLanguage = zh_Hans?>
        <?else?>
          <?define IdSafeLanguage = $(var.Language)?>
        <?endif?>
        <Component Id="Resources_$(var.IdSafeLanguage)_Component" Directory="Resources$(var.IdSafeLanguage)Folder">
          <File Id="Resources_ImageResizer_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)\modules\$(var.Language)\ImageResizer.resources.dll" />
        </Component>
        <?undef IdSafeLanguage?>
      <?endforeach?>
    </ComponentGroup>
  </Fragment>
</Wix>
