| 1 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> |
| 2 | <Package Name="Windows Subsystem for Linux" Language="1033" InstallerVersion="500" Version="${PACKAGE_VERSION}" Manufacturer="Microsoft Corporation" UpgradeCode="6D5B792B-1EDC-4DE9-8EAD-201B820F8E82" Scope="perMachine" Compressed="${COMPRESS_PACKAGE}"> |
| 3 | <MajorUpgrade AllowDowngrades="yes" Disallow="no" Schedule="afterInstallInitialize" /> |
| 4 | <MediaTemplate EmbedCab="yes" /> |
| 5 | |
| 6 | <StandardDirectory Id="ProgramFiles64Folder"> |
| 7 | <Directory Id="INSTALLDIR" Name="WSL"> |
| 8 | <Directory Id="TOOLSFOLDER" Name="tools" /> |
| 9 | <Directory Id="LIBFOLDER" Name="lib" /> |
| 10 | <?if "${WSL_BUILD_WSL_SETTINGS}" = "true" ?> |
| 11 | <Directory Id="WSLSETTINGS" Name="wslsettings"/> |
| 12 | <?endif?> |
| 13 | </Directory> |
| 14 | </StandardDirectory> |
| 15 | |
| 16 | <Icon Id="wsl.ico" SourceFile="${CMAKE_SOURCE_DIR}/images/wsl.ico"/> |
| 17 | <Property Id="ARPPRODUCTICON" Value="wsl.ico"/> |
| 18 | |
| 19 | <DirectoryRef Id="INSTALLDIR"> |
| 20 | <Component Id="wsl" Guid="F0C8D6BA-1502-41E7-BF72-D93DFA134730" UninstallWhenSuperseded="yes" DisableRegistryReflection="yes" Bitness="always64"> |
| 21 | <RemoveFile Id="CleanUpWSLShortCut" Directory="ProgramMenuFolder" Name="WSL" On="uninstall"/> |
| 22 | <File Id="wsl.exe" Name="wsl.exe" Source="${PACKAGE_INPUT_DIR}/wsl.exe" KeyPath="yes"> |
| 23 | <Shortcut Id="WSLShortcut" Name="WSL" Description="Windows Subsystem for Linux" Arguments="--cd ~" Directory="ProgramMenuFolder" Icon="wsl.ico"> |
| 24 | <ShortcutProperty Key="System.AppUserModel.ID" Value="Microsoft.WSL"/> |
| 25 | <ShortcutProperty Key="System.AppUserModel.ToastActivatorCLSID" Value="{2B9C59C3-98F1-45C8-B87B-12AE3C7927E8}"/> |
| 26 | </Shortcut> |
| 27 | </File> |
| 28 | |
| 29 | <File Id="wslg.exe" Name="wslg.exe" Source="${PACKAGE_INPUT_DIR}/wslg.exe" /> |
| 30 | <File Id="wslc.exe" Name="wslc.exe" Source="${PACKAGE_INPUT_DIR}/wslc.exe" /> |
| 31 | <File Id="container.exe" Name="container.exe" Source="${PACKAGE_INPUT_DIR}/wslc.exe" /> |
| 32 | <File Id="wslhost.exe" Name="wslhost.exe" Source="${PACKAGE_INPUT_DIR}/wslhost.exe" /> |
| 33 | <File Id="wslrelay.exe" Name="wslrelay.exe" Source="${PACKAGE_INPUT_DIR}/wslrelay.exe" /> |
| 34 | <File Id="wslserviceproxystub.dll" Name="wslserviceproxystub.dll" Source="${PACKAGE_INPUT_DIR}/wslserviceproxystub.dll" /> |
| 35 | <File Id="wsldevicehostproxystub.dll" Name="wsldevicehostproxystub.dll" Source="${PACKAGE_INPUT_DIR}/wsldevicehostproxystub.dll" /> |
| 36 | <File Id="wsldeps.dll" Name="wsldeps.dll" Source="${PACKAGE_INPUT_DIR}/wsldeps.dll" /> |
| 37 | |
| 38 | <File Id="NOTICE.txt" Name="NOTICE.txt" Source="${CMAKE_SOURCE_DIR}/NOTICE.txt" /> |
| 39 | |
| 40 | <?if "${WSL_BUILD_WSL_SETTINGS}" = "true" ?> |
| 41 | <File Id="libwsl.dll" Name="libwsl.dll" Source="${PACKAGE_INPUT_DIR}/libwsl.dll" /> |
| 42 | <?endif?> |
| 43 | |
| 44 | <?if "${WSL_DEV_BINARY_PATH}" = "" ?> |
| 45 | <File Id="system.vhd" Source="${WSLG_SOURCE_DIR}/${TARGET_PLATFORM}/system.vhd" /> |
| 46 | <?endif?> |
| 47 | |
| 48 | <!-- Add INSTALLDIR to system PATH to make wslc.exe and other CLI tools accessible. --> |
| 49 | <!-- NOTE: |
| 50 | - Permanent="no" ensures this PATH entry is removed when the MSI is uninstalled. |
| 51 | - If INSTALLDIR is manually moved or deleted after installation (outside of MSI), |
| 52 | the PATH entry will become stale until uninstall or manual correction. |
| 53 | - This behavior is intentional and currently implemented as a convenience until |
| 54 | we can deploy these CLI tools (e.g. wslc.exe) to a stable system location |
| 55 | such as System32, or offer an installer option to skip PATH modification. --> |
| 56 | <Environment Id="PATH" Name="PATH" Value="[INSTALLDIR]" Permanent="no" Part="last" Action="set" System="yes" /> |
| 57 | |
| 58 | <!-- Installation folder --> |
| 59 | <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\MSI"> |
| 60 | <RegistryValue Name="InstallLocation" Value="[INSTALLDIR]" Type="string" /> |
| 61 | <RegistryValue Name="ProductCode" Value="[ProductCode]" Type="string" /> |
| 62 | <RegistryValue Name="Version" Value="${PACKAGE_VERSION}" Type="string" /> |
| 63 | </RegistryKey> |
| 64 | |
| 65 | <!-- DCAT registration --> |
| 66 | <RegistryKey Root="HKLM" Key="${DCAT_REGISTRATION_KEY}"> |
| 67 | <RegistryValue Name="Version" Value="${PACKAGE_VERSION}" Type="string" /> |
| 68 | </RegistryKey> |
| 69 | </Component> |
| 70 | |
| 71 | <Component Id="explorerplan9shortcut" Guid="{93CBFF23-A04C-4344-A332-238CE5B97AED}" UninstallWhenSuperseded="yes" DisableRegistryReflection="yes" Bitness="always64"> |
| 72 | <!-- Explorer extensions --> |
| 73 | <RegistryKey Root="HKLM" Key="SOFTWARE\Classes\CLSID\{B2B4A4D1-2754-4140-A2EB-9A76D9D7CDC6}"> |
| 74 | <RegistryValue Value="Linux" Type="string"/> |
| 75 | <RegistryValue Name="SortOrderIndex" Value="119" Type="integer"/> |
| 76 | <!--0x77--> |
| 77 | <RegistryValue Name="System.IsPinnedToNameSpaceTree" Value="1" Type="integer"/> |
| 78 | |
| 79 | <RegistryKey Key="DefaultIcon"> |
| 80 | <RegistryValue Value="[System64Folder]wsl.exe,-1" Type="string"/> |
| 81 | </RegistryKey> |
| 82 | |
| 83 | <RegistryKey Key="InProcServer32"> |
| 84 | <RegistryValue Value="[System64Folder]windows.storage.dll" Type="string"/> |
| 85 | </RegistryKey> |
| 86 | |
| 87 | <RegistryKey Key="ShellFolder"> |
| 88 | <RegistryValue Name="Attributes" Value="2692743245" Type="integer"/> |
| 89 | <!--0xa080004d"--> |
| 90 | <RegistryValue Name="FolderValueFlags" Value="40" Type="integer"/> |
| 91 | <!--0x28--> |
| 92 | </RegistryKey> |
| 93 | |
| 94 | <RegistryKey Key="Instance"> |
| 95 | <RegistryValue Name="CLSID" Value="{4FE04BFD-85B9-49DD-B914-F4C9556B9DA6}" Type="string"/> |
| 96 | |
| 97 | <RegistryKey Key="InitPropertyBag"> |
| 98 | <RegistryValue Name="DisplayType" Value="2" Type="integer"/> |
| 99 | <RegistryValue Name="EnumObjectsTelemetryValue" Value="WSL" Type="string"/> |
| 100 | <RegistryValue Name="Provider" Value="Plan 9 Network Provider" Type="string"/> |
| 101 | <RegistryValue Name="ResName" Value="\\wsl.localhost" Type="string"/> |
| 102 | </RegistryKey> |
| 103 | </RegistryKey> |
| 104 | </RegistryKey> |
| 105 | |
| 106 | <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel"> |
| 107 | <RegistryValue Name="{B2B4A4D1-2754-4140-A2EB-9A76D9D7CDC6}" Value="1" Type="integer"/> |
| 108 | </RegistryKey> |
| 109 | |
| 110 | <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{B2B4A4D1-2754-4140-A2EB-9A76D9D7CDC6}"> |
| 111 | <RegistryValue Value="Linux" Type="string"/> |
| 112 | </RegistryKey> |
| 113 | |
| 114 | <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\IdListAliasTranslations\WSL"> |
| 115 | <RegistryValue Name="Target" Value="::{B2B4A4D1-2754-4140-A2EB-9A76D9D7CDC6}" Type="string"/> |
| 116 | <RegistryValue Name="Source" Value="\\wsl.localhost" Type="string"/> |
| 117 | </RegistryKey> |
| 118 | |
| 119 | <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\IdListAliasTranslations\WSLLegacy"> |
| 120 | <RegistryValue Name="Target" Value="::{B2B4A4D1-2754-4140-A2EB-9A76D9D7CDC6}" Type="string"/> |
| 121 | <RegistryValue Name="Source" Value="\\wsl$" Type="string"/> |
| 122 | </RegistryKey> |
| 123 | </Component> |
| 124 | |
| 125 | <Component Id="explorershell" Guid="{93CBFF23-A04C-4344-A332-238CE5B97AEC}" UninstallWhenSuperseded="yes" DisableRegistryReflection="yes" Bitness="always64"> |
| 126 | <?foreach PATH in SOFTWARE\Classes\Directory\shell\WSL;SOFTWARE\Classes\Directory\Background\shell\WSL;SOFTWARE\Classes\Drive\shell\WSL?> |
| 127 | <RegistryKey Root="HKLM" Key="$(var.PATH)"> |
| 128 | <RegistryValue Value="@wsl.exe,-2" Type="string"/> |
| 129 | <RegistryValue Name="Extended" Value="" Type="string"/> |
| 130 | <RegistryValue Name="NoWorkingDirectory" Value="" Type="string"/> |
| 131 | <RegistryKey Key="command"> |
| 132 | <RegistryValue Value='wsl.exe --cd "%V"' Type="string"/> |
| 133 | </RegistryKey> |
| 134 | </RegistryKey> |
| 135 | <?endforeach?> |
| 136 | |
| 137 | <ProgId Id="WSLDistributionTar" Description="WSL tar distribution" Icon="wsl.exe"> |
| 138 | <Extension Id="wsl"> |
| 139 | <Verb Id="open" Command="open" TargetFile="wsl.exe" Argument="--install --prompt-before-exit --from-file "%1"" /> |
| 140 | </Extension> |
| 141 | </ProgId> |
| 142 | <RegistryKey Root="HKLM" Key="SOFTWARE\Classes\WSLDistributionTar"> |
| 143 | <!-- FTA_AlwaysUnsafe --> |
| 144 | <RegistryValue Name="EditFlags" Value="131072" Type="integer" /> |
| 145 | </RegistryKey> |
| 146 | </Component> |
| 147 | |
| 148 | <Component Id="wslservice" Guid="F0C8D6BA-1502-41E7-BF72-D93DFA134735" UninstallWhenSuperseded="yes" DisableRegistryReflection="yes" Bitness="always64"> |
| 149 | |
| 150 | <!-- WslServiceProxyStub --> |
| 151 | <RegistryKey Root="HKCR" Key="Interface\{38541BDC-F54F-4CEB-85D0-37F0F3D2617E}"> |
| 152 | <RegistryValue Value="ILxssUserSession" Type="string" /> |
| 153 | <RegistryKey Key="ProxyStubClsid32"> |
| 154 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 155 | </RegistryKey> |
| 156 | </RegistryKey> |
| 157 | |
| 158 | <!-- WSLServiceProxyStub. --> |
| 159 | <RegistryKey Root="HKCR" Key="CLSID\{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}"> |
| 160 | <RegistryValue Value="PSFactoryBuffer" Type="string" /> |
| 161 | <RegistryKey Key="InProcServer32"> |
| 162 | <RegistryValue Value="[INSTALLDIR]wslserviceproxystub.dll" Type="string" /> |
| 163 | <RegistryValue Name="ThreadingModel" Value="Both" Type="string" /> |
| 164 | </RegistryKey> |
| 165 | </RegistryKey> |
| 166 | |
| 167 | <!-- ILxssUserSession --> |
| 168 | <RegistryKey Root="HKCR" Key="AppID\{370121D2-AA7E-4608-A86D-0BBAB9DA1A60}"> |
| 169 | |
| 170 | <!-- O:BAG:BAD:(A;;CCDCSW;;;AU)(A;;CCDCSW;;;PS)(A;;CCDCSW;;;SY) --> |
| 171 | <RegistryValue Name="AccessPermission" Value="${DCOM_PERMISSION}" Type="binary" /> |
| 172 | <RegistryValue Name="LaunchPermission" Value="${DCOM_PERMISSION}" Type="binary" /> |
| 173 | <RegistryValue Name="LocalService" Value="WSLService" Type="string" /> |
| 174 | </RegistryKey> |
| 175 | |
| 176 | <!-- WslSupport + LxssUserSession --> |
| 177 | <RegistryKey Root="HKCR" Key="CLSID\{a9b7a1b9-0671-405c-95f1-e0612cb4ce7e}"> |
| 178 | <RegistryValue Name="AppId" Value="{370121D2-AA7E-4608-A86D-0BBAB9DA1A60}" Type="string" /> |
| 179 | <RegistryValue Value="LxssUserSession" Type="string" /> |
| 180 | </RegistryKey> |
| 181 | |
| 182 | <!-- Notification server --> |
| 183 | <RegistryKey Root="HKCR" Key="CLSID\{2B9C59C3-98F1-45C8-B87B-12AE3C7927E8}\LocalServer32"> |
| 184 | <RegistryValue Value='"[INSTALLDIR]wslhost.exe"' Type="string" /> |
| 185 | </RegistryKey> |
| 186 | |
| 187 | <!-- wsldevicehost.dll --> |
| 188 | <RegistryKey Root="HKCR" Key="AppID\{17696EAC-9568-4CF5-BB8C-82515AAD6C09}"> |
| 189 | <RegistryValue Name="DllSurrogate" Value="" Type="string" /> |
| 190 | <RegistryValue Name="AppIDFlags" Value="2048" Type="integer" /> |
| 191 | |
| 192 | <!-- O:BAG:BAD:(A;;CCDCSW;;;AU)(A;;CCDCSW;;;PS)(A;;CCDCSW;;;SY) --> |
| 193 | <RegistryValue Name="AccessPermission" Value="${DCOM_PERMISSION}" Type="binary" /> |
| 194 | <RegistryValue Name="LaunchPermission" Value="${DCOM_PERMISSION}" Type="binary" /> |
| 195 | </RegistryKey> |
| 196 | |
| 197 | <!-- WslDeviceHostProxyStub --> |
| 198 | <RegistryKey Root="HKCR" Key="Interface\{27394DCF-6383-4E4E-BB0A-C13D4E5F6071}"> |
| 199 | <RegistryValue Value="IWslDeviceHost" Type="string" /> |
| 200 | <RegistryKey Key="ProxyStubClsid32"> |
| 201 | <RegistryValue Value="{6D32A4B7-9E1F-4C82-A573-F8B1C4D29E60}" Type="string" /> |
| 202 | </RegistryKey> |
| 203 | </RegistryKey> |
| 204 | <RegistryKey Root="HKCR" Key="Interface\{D2F47B8A-1E3C-4D9F-A6B5-7C8E9F0A1B2C}"> |
| 205 | <RegistryValue Value="IWslDeviceHostCallback" Type="string" /> |
| 206 | <RegistryKey Key="ProxyStubClsid32"> |
| 207 | <RegistryValue Value="{6D32A4B7-9E1F-4C82-A573-F8B1C4D29E60}" Type="string" /> |
| 208 | </RegistryKey> |
| 209 | </RegistryKey> |
| 210 | <RegistryKey Root="HKCR" Key="Interface\{E3F58C9B-2F4D-4E0A-B7C6-8D9F0A1B2C3D}"> |
| 211 | <RegistryValue Value="IWslVirtioNetDevice" Type="string" /> |
| 212 | <RegistryKey Key="ProxyStubClsid32"> |
| 213 | <RegistryValue Value="{6D32A4B7-9E1F-4C82-A573-F8B1C4D29E60}" Type="string" /> |
| 214 | </RegistryKey> |
| 215 | </RegistryKey> |
| 216 | <RegistryKey Root="HKCR" Key="Interface\{F406DACB-3050-4F1B-A8D7-9E0A1B2C3D4E}"> |
| 217 | <RegistryValue Value="IWslVirtiofsDevice" Type="string" /> |
| 218 | <RegistryKey Key="ProxyStubClsid32"> |
| 219 | <RegistryValue Value="{6D32A4B7-9E1F-4C82-A573-F8B1C4D29E60}" Type="string" /> |
| 220 | </RegistryKey> |
| 221 | </RegistryKey> |
| 222 | <RegistryKey Root="HKCR" Key="Interface\{05172EBD-4161-4C2C-99E8-AF1B2C3D4E5F}"> |
| 223 | <RegistryValue Value="IWslVirtioPmemDevice" Type="string" /> |
| 224 | <RegistryKey Key="ProxyStubClsid32"> |
| 225 | <RegistryValue Value="{6D32A4B7-9E1F-4C82-A573-F8B1C4D29E60}" Type="string" /> |
| 226 | </RegistryKey> |
| 227 | </RegistryKey> |
| 228 | <RegistryKey Root="HKCR" Key="Interface\{16283FCE-5272-4D3D-AAF9-B02C3D4E5F60}"> |
| 229 | <RegistryValue Value="IWslVm" Type="string" /> |
| 230 | <RegistryKey Key="ProxyStubClsid32"> |
| 231 | <RegistryValue Value="{6D32A4B7-9E1F-4C82-A573-F8B1C4D29E60}" Type="string" /> |
| 232 | </RegistryKey> |
| 233 | </RegistryKey> |
| 234 | |
| 235 | <RegistryKey Root="HKCR" Key="CLSID\{6D32A4B7-9E1F-4C82-A573-F8B1C4D29E60}"> |
| 236 | <RegistryValue Value="WslDeviceHostProxyStub" Type="string" /> |
| 237 | <RegistryKey Key="InProcServer32"> |
| 238 | <RegistryValue Value="[INSTALLDIR]wsldevicehostproxystub.dll" Type="string" /> |
| 239 | <RegistryValue Name="ThreadingModel" Value="Both" Type="string" /> |
| 240 | </RegistryKey> |
| 241 | </RegistryKey> |
| 242 | |
| 243 | <!-- WslDeviceHost --> |
| 244 | <RegistryKey Root="HKCR" Key="CLSID\{2C3E9A41-7B5D-4F18-93D6-A8C2E4F7B1D9}"> |
| 245 | <RegistryValue Value="WslDeviceHost" Type="string" /> |
| 246 | <RegistryValue Name="AppId" Value="{17696EAC-9568-4CF5-BB8C-82515AAD6C09}" Type="string"/> |
| 247 | |
| 248 | <RegistryKey Key="InProcServer32"> |
| 249 | <RegistryValue Value="[INSTALLDIR]wsldevicehost.dll" Type="string" /> |
| 250 | <RegistryValue Name="ThreadingModel" Value="Both" Type="string" /> |
| 251 | </RegistryKey> |
| 252 | </RegistryKey> |
| 253 | |
| 254 | <!-- WslDeviceHost for elevated activation --> |
| 255 | <RegistryKey Root="HKCR" Key="CLSID\{E3146082-A0DA-43A7-813B-A89EEE8C7628}"> |
| 256 | <RegistryValue Value="WslDeviceHost_Admin" Type="string" /> |
| 257 | <RegistryValue Name="AppId" Value="{17696EAC-9568-4CF5-BB8C-82515AAD6C09}" Type="string"/> |
| 258 | |
| 259 | <RegistryKey Key="InProcServer32"> |
| 260 | <RegistryValue Value="[INSTALLDIR]wsldevicehost.dll" Type="string" /> |
| 261 | <RegistryValue Name="ThreadingModel" Value="Both" Type="string" /> |
| 262 | </RegistryKey> |
| 263 | </RegistryKey> |
| 264 | |
| 265 | <!-- WslDeviceHost without telemetry --> |
| 266 | <RegistryKey Root="HKCR" Key="CLSID\{4F9C8B23-D6E1-4A85-BF2A-E7C5D8F931A6}"> |
| 267 | <RegistryValue Value="WslDeviceHost_NoTelemetry" Type="string"/> |
| 268 | <RegistryValue Name="AppId" Value="{17696EAC-9568-4CF5-BB8C-82515AAD6C09}" Type="string"/> |
| 269 | |
| 270 | <RegistryKey Key="InProcServer32"> |
| 271 | <RegistryValue Value="[INSTALLDIR]wsldevicehost.dll" Type="string"/> |
| 272 | <RegistryValue Name="ThreadingModel" Value="Both" Type="string"/> |
| 273 | </RegistryKey> |
| 274 | </RegistryKey> |
| 275 | |
| 276 | <!-- WslDeviceHost without telemetry for elevated activation --> |
| 277 | <RegistryKey Root="HKCR" Key="CLSID\{9C9C7131-D756-48FA-BD49-734E75AF37C0}"> |
| 278 | <RegistryValue Value="WslDeviceHost_NoTelemetry_Admin" Type="string"/> |
| 279 | <RegistryValue Name="AppId" Value="{17696EAC-9568-4CF5-BB8C-82515AAD6C09}" Type="string"/> |
| 280 | |
| 281 | <RegistryKey Key="InProcServer32"> |
| 282 | <RegistryValue Value="[INSTALLDIR]wsldevicehost.dll" Type="string"/> |
| 283 | <RegistryValue Name="ThreadingModel" Value="Both" Type="string"/> |
| 284 | </RegistryKey> |
| 285 | </RegistryKey> |
| 286 | |
| 287 | <!-- Session 0 service --> |
| 288 | <File Id="wslservice.exe" Source="${PACKAGE_INPUT_DIR}/wslservice.exe" KeyPath="yes" /> |
| 289 | <ServiceInstall Name="WSLService" DisplayName="WSL Service" Description="WSL Service" Start="auto" Type="ownProcess" ErrorControl="normal" Account="LocalSystem" Vital="yes" Interactive="no" /> |
| 290 | |
| 291 | <!-- The service is stopped on uninstall and upgrade. |
| 292 | N.B. It shouldn't be started on install because it will fail to start if the OC is missing, |
| 293 | which would fail the install. --> |
| 294 | <ServiceControl Id="StopService" Stop="both" Remove="uninstall" Name="WSLService" Wait="yes" /> |
| 295 | |
| 296 | <File Id="wsldevicehost.dll" Source="${WSL_DEVICE_HOST_DLL_PATH}" /> |
| 297 | |
| 298 | <!-- WSLC COM app - activated through WSLService --> |
| 299 | <RegistryKey Root="HKCR" Key="AppID\{E9B79997-57E3-4201-AECC-6A464E530DD2}"> |
| 300 | <!-- O:BAG:BAD:(A;;CCDCSW;;;AU)(A;;CCDCSW;;;PS)(A;;CCDCSW;;;SY) --> |
| 301 | <RegistryValue Name="AccessPermission" Value="${DCOM_PERMISSION}" Type="binary" /> |
| 302 | <RegistryValue Name="LaunchPermission" Value="${DCOM_PERMISSION}" Type="binary" /> |
| 303 | <RegistryValue Name="LocalService" Value="WSLService" Type="string" /> |
| 304 | </RegistryKey> |
| 305 | |
| 306 | <!-- WSLCContainer --> |
| 307 | <RegistryKey Root="HKCR" Key="CLSID\{B1F1C4E3-C225-4CAE-AD8A-34C004DE1AE4}"> |
| 308 | <RegistryValue Name="AppId" Value="{E9B79997-57E3-4201-AECC-6A464E530DD2}" Type="string" /> |
| 309 | <RegistryValue Value="WSLCContainer" Type="string" /> |
| 310 | </RegistryKey> |
| 311 | |
| 312 | <!-- WSLCProcess --> |
| 313 | <RegistryKey Root="HKCR" Key="CLSID\{AFBEA6D6-D8A4-4F81-8FED-F947EB74B33B}"> |
| 314 | <RegistryValue Name="AppId" Value="{E9B79997-57E3-4201-AECC-6A464E530DD2}" Type="string" /> |
| 315 | <RegistryValue Value="WSLCProcess" Type="string" /> |
| 316 | </RegistryKey> |
| 317 | |
| 318 | <!-- WSLCSessionManager --> |
| 319 | <RegistryKey Root="HKCR" Key="CLSID\{a9b7a1b9-0671-405c-95f1-e0612cb4ce8f}"> |
| 320 | <RegistryValue Name="AppId" Value="{E9B79997-57E3-4201-AECC-6A464E530DD2}" Type="string" /> |
| 321 | <RegistryValue Value="WSLCSessionManager" Type="string" /> |
| 322 | </RegistryKey> |
| 323 | |
| 324 | <!-- WSLCSessionFactory - COM server in per-user process --> |
| 325 | <RegistryKey Root="HKCR" Key="AppID\{1FAB86C3-F4DF-4271-8E63-6F071C4F708A}"> |
| 326 | <!-- O:BAG:BAD:(A;;CCDCSW;;;AU)(A;;CCDCSW;;;PS)(A;;CCDCSW;;;SY) --> |
| 327 | <RegistryValue Name="AccessPermission" Value="${DCOM_PERMISSION}" Type="binary" /> |
| 328 | <RegistryValue Name="LaunchPermission" Value="${DCOM_PERMISSION}" Type="binary" /> |
| 329 | </RegistryKey> |
| 330 | <RegistryKey Root="HKCR" Key="CLSID\{9FCD2067-9FC6-4EFA-9EB0-698169EBF7D3}"> |
| 331 | <RegistryValue Name="AppId" Value="{1FAB86C3-F4DF-4271-8E63-6F071C4F708A}" Type="string" /> |
| 332 | <RegistryValue Value="WSLCSessionFactory" Type="string" /> |
| 333 | <RegistryKey Key="LocalServer32"> |
| 334 | <RegistryValue Value='"[INSTALLDIR]wslcsession.exe"' Type="string" /> |
| 335 | </RegistryKey> |
| 336 | </RegistryKey> |
| 337 | |
| 338 | <!-- IWSLCSessionManager--> |
| 339 | <RegistryKey Root="HKCR" Key="Interface\{82A7ABC8-6B50-43FC-AB96-15FBBE7E8760}"> |
| 340 | <RegistryValue Value="IWSLCSessionManager" Type="string" /> |
| 341 | <RegistryKey Key="ProxyStubClsid32"> |
| 342 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 343 | </RegistryKey> |
| 344 | </RegistryKey> |
| 345 | |
| 346 | <!-- IWSLCContainer--> |
| 347 | <RegistryKey Root="HKCR" Key="Interface\{7577FE8D-DE85-471E-B870-11669986F332}"> |
| 348 | <RegistryValue Value="IWSLCContainer" Type="string" /> |
| 349 | <RegistryKey Key="ProxyStubClsid32"> |
| 350 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 351 | </RegistryKey> |
| 352 | </RegistryKey> |
| 353 | |
| 354 | <!-- IWSLCProcess--> |
| 355 | <RegistryKey Root="HKCR" Key="Interface\{1AD163CD-393D-4B33-83A2-8A3F3F23E608}"> |
| 356 | <RegistryValue Value="IWSLCProcess" Type="string" /> |
| 357 | <RegistryKey Key="ProxyStubClsid32"> |
| 358 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 359 | </RegistryKey> |
| 360 | </RegistryKey> |
| 361 | |
| 362 | <!-- IWSLCEventStream--> |
| 363 | <RegistryKey Root="HKCR" Key="Interface\{7EC66D3B-D098-4D48-B69E-69166F6C4745}"> |
| 364 | <RegistryValue Value="IWSLCEventStream" Type="string" /> |
| 365 | <RegistryKey Key="ProxyStubClsid32"> |
| 366 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 367 | </RegistryKey> |
| 368 | </RegistryKey> |
| 369 | |
| 370 | <!-- ICrashDumpCallback--> |
| 371 | <RegistryKey Root="HKCR" Key="Interface\{8C5A7B14-9D26-4FAE-AB31-7E5BC23F4801}"> |
| 372 | <RegistryValue Value="ICrashDumpCallback" Type="string" /> |
| 373 | <RegistryKey Key="ProxyStubClsid32"> |
| 374 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 375 | </RegistryKey> |
| 376 | </RegistryKey> |
| 377 | |
| 378 | <!-- IProgressCallback--> |
| 379 | <RegistryKey Root="HKCR" Key="Interface\{5038842F-53DB-4F30-A6D0-A41B02C94AC1}"> |
| 380 | <RegistryValue Value="IProgressCallback" Type="string" /> |
| 381 | <RegistryKey Key="ProxyStubClsid32"> |
| 382 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 383 | </RegistryKey> |
| 384 | </RegistryKey> |
| 385 | |
| 386 | <!-- IWarningCallback--> |
| 387 | <RegistryKey Root="HKCR" Key="Interface\{8153ED5D-8ABB-408B-ADBE-C0F3B13E07C3}"> |
| 388 | <RegistryValue Value="IWarningCallback" Type="string" /> |
| 389 | <RegistryKey Key="ProxyStubClsid32"> |
| 390 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 391 | </RegistryKey> |
| 392 | </RegistryKey> |
| 393 | |
| 394 | <!-- IImageLoadCallback--> |
| 395 | <RegistryKey Root="HKCR" Key="Interface\{7F3B62FD-E1C1-4F69-A8E2-853CAD9051BD}"> |
| 396 | <RegistryValue Value="IImageLoadCallback" Type="string" /> |
| 397 | <RegistryKey Key="ProxyStubClsid32"> |
| 398 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 399 | </RegistryKey> |
| 400 | </RegistryKey> |
| 401 | |
| 402 | <!-- IWSLCSession--> |
| 403 | <RegistryKey Root="HKCR" Key="Interface\{EF0661E4-6364-40EA-B433-E2FDF11F3519}"> |
| 404 | <RegistryValue Value="IWSLCSession" Type="string" /> |
| 405 | <RegistryKey Key="ProxyStubClsid32"> |
| 406 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 407 | </RegistryKey> |
| 408 | </RegistryKey> |
| 409 | |
| 410 | <!-- IWSLCSessionReference--> |
| 411 | <RegistryKey Root="HKCR" Key="Interface\{B3A72F48-9D15-4E8A-A621-7C3E84F09B52}"> |
| 412 | <RegistryValue Value="IWSLCSessionReference" Type="string" /> |
| 413 | <RegistryKey Key="ProxyStubClsid32"> |
| 414 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 415 | </RegistryKey> |
| 416 | </RegistryKey> |
| 417 | |
| 418 | <!-- IWSLCSessionFactory--> |
| 419 | <RegistryKey Root="HKCR" Key="Interface\{C4E8F291-3B5D-4A7C-9E12-8F6A4D2B7C91}"> |
| 420 | <RegistryValue Value="IWSLCSessionFactory" Type="string" /> |
| 421 | <RegistryKey Key="ProxyStubClsid32"> |
| 422 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 423 | </RegistryKey> |
| 424 | </RegistryKey> |
| 425 | |
| 426 | <!-- IWSLCVirtualMachine--> |
| 427 | <RegistryKey Root="HKCR" Key="Interface\{B5E2D8F1-9A3C-4E6B-8D1F-7C4A2E9B6D3A}"> |
| 428 | <RegistryValue Value="IWSLCVirtualMachine" Type="string" /> |
| 429 | <RegistryKey Key="ProxyStubClsid32"> |
| 430 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 431 | </RegistryKey> |
| 432 | </RegistryKey> |
| 433 | |
| 434 | <!-- IWSLCVirtualMachineFactory--> |
| 435 | <RegistryKey Root="HKCR" Key="Interface\{2E3C9A41-7D58-4B6E-9F12-6C4A2E9B6D3B}"> |
| 436 | <RegistryValue Value="IWSLCVirtualMachineFactory" Type="string" /> |
| 437 | <RegistryKey Key="ProxyStubClsid32"> |
| 438 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 439 | </RegistryKey> |
| 440 | </RegistryKey> |
| 441 | |
| 442 | <!-- IWSLCPluginNotifier--> |
| 443 | <RegistryKey Root="HKCR" Key="Interface\{F3E6D5B2-1D40-4E8B-9C39-7A45D1C0F8A2}"> |
| 444 | <RegistryValue Value="IWSLCPluginNotifier" Type="string" /> |
| 445 | <RegistryKey Key="ProxyStubClsid32"> |
| 446 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 447 | </RegistryKey> |
| 448 | </RegistryKey> |
| 449 | |
| 450 | <!-- IWSLCCompatCrashDumpCallback--> |
| 451 | <RegistryKey Root="HKCR" Key="Interface\{EAA15E20-7FCC-485B-B798-ED4095DBACA5}"> |
| 452 | <RegistryValue Value="IWSLCCompatCrashDumpCallback" Type="string" /> |
| 453 | <RegistryKey Key="ProxyStubClsid32"> |
| 454 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 455 | </RegistryKey> |
| 456 | </RegistryKey> |
| 457 | |
| 458 | <!-- IWSLCCompatProgressCallback--> |
| 459 | <RegistryKey Root="HKCR" Key="Interface\{06154F2A-ACA7-461E-94FC-92781BA1F6F6}"> |
| 460 | <RegistryValue Value="IWSLCCompatProgressCallback" Type="string" /> |
| 461 | <RegistryKey Key="ProxyStubClsid32"> |
| 462 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 463 | </RegistryKey> |
| 464 | </RegistryKey> |
| 465 | |
| 466 | <!-- IWSLCCompatWarningCallback--> |
| 467 | <RegistryKey Root="HKCR" Key="Interface\{290C58A1-328C-4E90-B09B-0A9D32C40074}"> |
| 468 | <RegistryValue Value="IWSLCCompatWarningCallback" Type="string" /> |
| 469 | <RegistryKey Key="ProxyStubClsid32"> |
| 470 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 471 | </RegistryKey> |
| 472 | </RegistryKey> |
| 473 | |
| 474 | <!-- IWSLCCompatProcess--> |
| 475 | <RegistryKey Root="HKCR" Key="Interface\{AC69DD0D-6616-4C4F-91F2-C39D6034EA82}"> |
| 476 | <RegistryValue Value="IWSLCCompatProcess" Type="string" /> |
| 477 | <RegistryKey Key="ProxyStubClsid32"> |
| 478 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 479 | </RegistryKey> |
| 480 | </RegistryKey> |
| 481 | |
| 482 | <!-- IWSLCCompatContainer--> |
| 483 | <RegistryKey Root="HKCR" Key="Interface\{8C3C91FA-D550-41B9-AD9D-23DCBF96F549}"> |
| 484 | <RegistryValue Value="IWSLCCompatContainer" Type="string" /> |
| 485 | <RegistryKey Key="ProxyStubClsid32"> |
| 486 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 487 | </RegistryKey> |
| 488 | </RegistryKey> |
| 489 | |
| 490 | <!-- IWSLCCompatSession--> |
| 491 | <RegistryKey Root="HKCR" Key="Interface\{DD7B2EF9-AA01-4F21-8A3A-29D394CBB579}"> |
| 492 | <RegistryValue Value="IWSLCCompatSession" Type="string" /> |
| 493 | <RegistryKey Key="ProxyStubClsid32"> |
| 494 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 495 | </RegistryKey> |
| 496 | </RegistryKey> |
| 497 | |
| 498 | <!-- IWSLCCompatSessionManager--> |
| 499 | <RegistryKey Root="HKCR" Key="Interface\{279F2047-DA35-45A3-B671-AFD2302D5D16}"> |
| 500 | <RegistryValue Value="IWSLCCompatSessionManager" Type="string" /> |
| 501 | <RegistryKey Key="ProxyStubClsid32"> |
| 502 | <RegistryValue Value="{4EA0C6DD-E9FF-48E7-994E-13A31D10DC60}" Type="string" /> |
| 503 | </RegistryKey> |
| 504 | </RegistryKey> |
| 505 | |
| 506 | <File Id="wslcsession.exe" Source="${BIN}/wslcsession.exe" /> |
| 507 | </Component> |
| 508 | <Component Id="wslg" Guid="F0C8D6BA-1502-41E7-BF72-D93DFA134731" UninstallWhenSuperseded="yes" DisableRegistryReflection="yes" Bitness="always64"> |
| 509 | <?if "${WSL_DEV_BINARY_PATH}" = "" ?> |
| 510 | <File Id="msrdc.exe" Source="${MSRDC_SOURCE_DIR}/${TARGET_PLATFORM}/msrdc.exe" /> |
| 511 | <File Id="wslg.rdp" Source="${WSLG_SOURCE_DIR}/wslg.rdp" /> |
| 512 | <File Id="wslg_desktop.rdp" Source="${WSLG_SOURCE_DIR}/wslg_desktop.rdp" /> |
| 513 | <File Id="rdclientax.dll" Source="${MSRDC_SOURCE_DIR}/${TARGET_PLATFORM}/rdclientax.dll" /> |
| 514 | <File Id="rdpnanoTransport.dll" Source="${MSRDC_SOURCE_DIR}/${TARGET_PLATFORM}/rdpnanoTransport.dll" /> |
| 515 | <File Id="RdpWinStlHelper.dll" Source="${MSRDC_SOURCE_DIR}/${TARGET_PLATFORM}/RdpWinStlHelper.dll" /> |
| 516 | <?endif?> |
| 517 | <File Id="${WSLG_TS_PLUGIN_DLL}" Source="${PACKAGE_INPUT_DIR}/${WSLG_TS_PLUGIN_DLL}" /> |
| 518 | |
| 519 | <!-- MSRDC Plugin registration --> |
| 520 | <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Terminal Server Client\Default\OptionalAddIns\WSLDVC_PACKAGE"> |
| 521 | <RegistryValue Name="Name" Value="[INSTALLDIR]WSLDVCPlugin.dll" Type="string" /> |
| 522 | </RegistryKey> |
| 523 | </Component> |
| 524 | |
| 525 | <?if "${WSL_DEV_BINARY_PATH}" = "" ?> |
| 526 | <Component Id="msal" Guid="F0C8D6BA-1502-41E7-BF72-D93DFA134734" UninstallWhenSuperseded="yes" DisableRegistryReflection="yes" Bitness="always64"> |
| 527 | <File Id="msal.wsl.proxy.exe" Source="${MSAL_SOURCE_DIR}/${TARGET_PLATFORM}/msal.wsl.proxy.exe" /> |
| 528 | </Component> |
| 529 | <?endif?> |
| 530 | </DirectoryRef> |
| 531 | |
| 532 | <?if "${WSL_DEV_BINARY_PATH}" = "" ?> |
| 533 | <DirectoryRef Id="LIBFOLDER"> |
| 534 | <Component Id="directx" Guid="F0C8D6BA-1502-41E7-BF72-D93DFA134732" Bitness="always64" UninstallWhenSuperseded="yes"> |
| 535 | <File Id="libd3d12.so" Source="${DIRECT3D_SOURCE_DIR}/lib/${TARGET_PLATFORM}/libd3d12.so" /> |
| 536 | <File Id="libd3d12core.so" Source="${DIRECT3D_SOURCE_DIR}/lib/${TARGET_PLATFORM}/libd3d12core.so" /> |
| 537 | <File Id="libdxcore.so" Source="${DXCORE_SOURCE_DIR}/lib/libdxcore.so" /> |
| 538 | </Component> |
| 539 | </DirectoryRef> |
| 540 | <?endif?> |
| 541 | |
| 542 | <DirectoryRef Id="TOOLSFOLDER"> |
| 543 | <Component Id="tools" Guid="F0C8D6BA-1502-41E7-BF72-D93DFA134733" Bitness="always64" UninstallWhenSuperseded="yes"> |
| 544 | <File Id="init" Source="${BIN}/init" Checksum="yes" /> |
| 545 | <File Id="initrd.img" Source="${BIN}/initrd.img" Checksum="yes" /> |
| 546 | <File Id="bsdtar" Source="${BSDTARD_SOURCE_DIR}/${TARGET_PLATFORM}/bsdtar"/> |
| 547 | |
| 548 | <?if "${WSL_DEV_BINARY_PATH}" = "" ?> |
| 549 | <File Id="kernel" Source="${KERNEL_SOURCE_DIR}/bin/${TARGET_PLATFORM}/kernel"/> |
| 550 | <File Id="artifacts.vhd" Source="${KERNEL_SOURCE_DIR}/bin/${TARGET_PLATFORM}/artifacts.vhd"/> |
| 551 | <?endif?> |
| 552 | </Component> |
| 553 | </DirectoryRef> |
| 554 | |
| 555 | <?if "${WSL_DEV_BINARY_PATH}" = "" ?> |
| 556 | <ComponentGroup Id="msrdc_localization" Directory="INSTALLDIR" Source="${MSRDC_SOURCE_DIR}/${TARGET_PLATFORM}"> |
| 557 | <Component Id="msrdc_mui" Guid="EDBB5FC5-058D-45D7-BB03-FB1337B3B577" Bitness="always64" UninstallWhenSuperseded="yes" /> |
| 558 | <Files Include="**.mui" /> |
| 559 | </ComponentGroup> |
| 560 | <?endif?> |
| 561 | |
| 562 | |
| 563 | <?if "${WSL_BUILD_WSL_SETTINGS}" = "true" ?> |
| 564 | <ComponentGroup Id="wslsettings" Directory="WSLSETTINGS" Source="${BIN}/wslsettings"> |
| 565 | <Component Id="wslsettingsnonserver" Guid="AB166073-8855-492B-95C8-C6E5939B66A5" Bitness="always64" DisableRegistryReflection="yes" UninstallWhenSuperseded="yes" Condition="MsiNTProductType = 1"> |
| 566 | <RemoveFile Id="CleanUpWSLSettingsShortCutNonServer" Directory="ProgramMenuFolder" Name="WSLSettings" On="uninstall"/> |
| 567 | <File Id="wslsettings.exe_nonserver" Source="${PACKAGE_INPUT_DIR}/wslsettings/wslsettings.exe" KeyPath="yes" ShortName="kyk8fs6a.exe"> |
| 568 | <Shortcut Id="WSLSettingsShortcutNonServer" Name="WSL Settings" Description="Windows Subsystem for Linux Settings" Directory="ProgramMenuFolder" Icon="wsl.ico"/> |
| 569 | </File> |
| 570 | <!-- Protocol registration --> |
| 571 | <RegistryKey Root="HKLM" Key="Software"> |
| 572 | <RegistryKey Key="Classes"> |
| 573 | <RegistryKey Key="wsl-settings"> |
| 574 | <RegistryValue Value="URL:wsl-settings" Type="string" /> |
| 575 | <RegistryValue Name="URL Protocol" Value="" Type="string" /> |
| 576 | </RegistryKey> |
| 577 | <RegistryKey Key="[WSLSETTINGSPROGID]"> |
| 578 | <RegistryKey Key="Application"> |
| 579 | <RegistryValue Name="ApplicationName" Value="WSL Settings" Type="string" /> |
| 580 | </RegistryKey> |
| 581 | <RegistryKey Key="shell\open\command"> |
| 582 | <RegistryValue Value='"[WSLSETTINGS]wslsettings.exe" "----ms-protocol:%1"' Type="string" /> |
| 583 | </RegistryKey> |
| 584 | </RegistryKey> |
| 585 | </RegistryKey> |
| 586 | <RegistryKey Key="Microsoft\WindowsAppRuntimeApplications\[WSLSETTINGSAPPID]\Capabilities\UrlAssociations"> |
| 587 | <RegistryValue Name="wsl-settings" Value="[WSLSETTINGSPROGID]" Type="string" /> |
| 588 | </RegistryKey> |
| 589 | <RegistryKey Key="RegisteredApplications"> |
| 590 | <RegistryValue Name="[WSLSETTINGSAPPID]" Value="Software\Microsoft\WindowsAppRuntimeApplications\[WSLSETTINGSAPPID]\Capabilities" Type="string" /> |
| 591 | </RegistryKey> |
| 592 | </RegistryKey> |
| 593 | </Component> |
| 594 | <Component Id="wslsettingsserver" Guid="EE2D69A0-4F55-4EC5-9576-4FAD70BC798E" Bitness="always64" DisableRegistryReflection="yes" UninstallWhenSuperseded="yes" Condition="MsiNTProductType > 1"> |
| 595 | <RemoveFile Id="CleanUpWSLSettingsShortCutServer" Directory="ProgramMenuFolder" Name="WSLSettings" On="uninstall"/> |
| 596 | <File Id="wslsettings.exe_server" Source="${PACKAGE_INPUT_DIR}/wslsettings/wslsettings.exe" KeyPath="yes" ShortName="kyk8fs6b.exe"> |
| 597 | <Shortcut Id="WSLSettingsShortcutServer" Name="WSL Settings" Description="Windows Subsystem for Linux Settings" Directory="ProgramMenuFolder" Icon="wsl.ico"/> |
| 598 | </File> |
| 599 | <!-- Protocol registration --> |
| 600 | <RegistryKey Root="HKLM" Key="Software"> |
| 601 | <RegistryKey Key="Classes"> |
| 602 | <RegistryKey Key="wsl-settings"> |
| 603 | <RegistryValue Value="URL:wsl-settings" Type="string" /> |
| 604 | <RegistryValue Name="URL Protocol" Value="" Type="string" /> |
| 605 | </RegistryKey> |
| 606 | <RegistryKey Key="[WSLSETTINGSPROGID]"> |
| 607 | <RegistryKey Key="Application"> |
| 608 | <RegistryValue Name="ApplicationName" Value="WSL Settings" Type="string" /> |
| 609 | </RegistryKey> |
| 610 | <RegistryKey Key="shell\open\command"> |
| 611 | <RegistryValue Value='"[WSLSETTINGS]wslsettings.exe" "----ms-protocol:%1"' Type="string" /> |
| 612 | </RegistryKey> |
| 613 | </RegistryKey> |
| 614 | </RegistryKey> |
| 615 | <RegistryKey Key="Microsoft\WindowsAppRuntimeApplications\[WSLSETTINGSAPPID]\Capabilities\UrlAssociations"> |
| 616 | <RegistryValue Name="wsl-settings" Value="[WSLSETTINGSPROGID]" Type="string" /> |
| 617 | </RegistryKey> |
| 618 | <RegistryKey Key="RegisteredApplications"> |
| 619 | <RegistryValue Name="[WSLSETTINGSAPPID]" Value="Software\Microsoft\WindowsAppRuntimeApplications\[WSLSETTINGSAPPID]\Capabilities" Type="string" /> |
| 620 | </RegistryKey> |
| 621 | </RegistryKey> |
| 622 | </Component> |
| 623 | <File Id="wslsettings.dll" Source="${PACKAGE_INPUT_DIR}/wslsettings/wslsettings.dll"/> |
| 624 | <Files Include="*.dll"> |
| 625 | <Exclude Files="wslsettings.dll" /> |
| 626 | </Files> |
| 627 | <Files Include="*.exe"> |
| 628 | <Exclude Files="wslsettings.exe" /> |
| 629 | </Files> |
| 630 | <Files Include="**/*.gif"/> |
| 631 | <Files Include="**/*.ico"/> |
| 632 | <Files Include="**/*.mui"/> |
| 633 | <Files Include="**/*.png"/> |
| 634 | <Files Include="*.json"/> |
| 635 | <Files Include="*.pri"/> |
| 636 | <Files Include="*.winmd"/> |
| 637 | <Files Include="**/*.xbf"/> |
| 638 | </ComponentGroup> |
| 639 | <?endif?> |
| 640 | |
| 641 | <Feature Id="WSL" Title="Windows Subsystem for Linux" Level="1"> |
| 642 | <ComponentRef Id="wsl" /> |
| 643 | <ComponentRef Id="wslservice" /> |
| 644 | <ComponentRef Id="wslg" /> |
| 645 | <ComponentRef Id="tools" /> |
| 646 | <ComponentRef Id="explorershell" /> |
| 647 | <ComponentRef Id="explorerplan9shortcut" /> |
| 648 | |
| 649 | <?if "${WSL_DEV_BINARY_PATH}" = "" ?> |
| 650 | <ComponentRef Id="msal" /> |
| 651 | <ComponentGroupRef Id="msrdc_localization" /> |
| 652 | <ComponentRef Id="directx" /> |
| 653 | <?endif?> |
| 654 | |
| 655 | <?if "${WSL_BUILD_WSL_SETTINGS}" = "true" ?> |
| 656 | <ComponentGroupRef Id="wslsettings" /> |
| 657 | <?endif?> |
| 658 | |
| 659 | </Feature> |
| 660 | |
| 661 | <Binary Id="wslinstall.dll" SourceFile="${PACKAGE_INPUT_DIR}/wslinstall.dll" /> |
| 662 | <Binary Id="msixpackage" SourceFile="${PACKAGE_INPUT_DIR}/gluepackage.msix"/> |
| 663 | |
| 664 | <CustomAction Id="ValidateInstall" |
| 665 | Impersonate="no" |
| 666 | BinaryRef="wslinstall.dll" |
| 667 | DllEntry="WslValidateInstallation" |
| 668 | Return="check" |
| 669 | Execute="deferred" |
| 670 | /> |
| 671 | |
| 672 | <CustomAction Id="FinalizeInstall" |
| 673 | Impersonate="no" |
| 674 | BinaryRef="wslinstall.dll" |
| 675 | DllEntry="WslFinalizeInstallation" |
| 676 | Return="check" |
| 677 | Execute="deferred" |
| 678 | /> |
| 679 | |
| 680 | <CustomAction Id="DeprovisionMsix" |
| 681 | Impersonate="no" |
| 682 | BinaryRef="wslinstall.dll" |
| 683 | DllEntry="DeprovisionMsix" |
| 684 | Return="check" |
| 685 | Execute="deferred" |
| 686 | /> |
| 687 | |
| 688 | <CustomAction Id="RemoveMsixAsSystem" |
| 689 | Impersonate="no" |
| 690 | BinaryRef="wslinstall.dll" |
| 691 | DllEntry="RemoveMsixAsSystem" |
| 692 | Return="check" |
| 693 | Execute="deferred" |
| 694 | /> |
| 695 | |
| 696 | <CustomAction Id="RemoveMsixAsUser" |
| 697 | Impersonate="yes" |
| 698 | BinaryRef="wslinstall.dll" |
| 699 | DllEntry="RemoveMsixAsUser" |
| 700 | Return="check" |
| 701 | Execute="deferred" |
| 702 | /> |
| 703 | |
| 704 | <CustomAction Id="InstallMsix" |
| 705 | Impersonate="no" |
| 706 | BinaryRef="wslinstall.dll" |
| 707 | DllEntry="InstallMsix" |
| 708 | Return="check" |
| 709 | Execute="deferred" |
| 710 | /> |
| 711 | |
| 712 | <CustomAction Id="InstallMsixAsUser" |
| 713 | Impersonate="yes" |
| 714 | BinaryRef="wslinstall.dll" |
| 715 | DllEntry="InstallMsixAsUser" |
| 716 | Return="check" |
| 717 | Execute="deferred" |
| 718 | /> |
| 719 | |
| 720 | <CustomAction Id="CleanExplorerState" |
| 721 | Impersonate="no" |
| 722 | BinaryRef="wslinstall.dll" |
| 723 | DllEntry="CleanExplorerState" |
| 724 | Return="check" |
| 725 | Execute="deferred" |
| 726 | /> |
| 727 | |
| 728 | <CustomAction Id="CleanMsixState" |
| 729 | Impersonate="no" |
| 730 | BinaryRef="wslinstall.dll" |
| 731 | DllEntry="CleanMsixState" |
| 732 | Return="check" |
| 733 | Execute="deferred" |
| 734 | /> |
| 735 | |
| 736 | <CustomAction Id="RegisterLspCategories" |
| 737 | Impersonate="no" |
| 738 | BinaryRef="wslinstall.dll" |
| 739 | DllEntry="RegisterLspCategories" |
| 740 | Return="check" |
| 741 | Execute="deferred" |
| 742 | /> |
| 743 | |
| 744 | |
| 745 | <CustomAction Id="RemoveRegistryKeyProtections" |
| 746 | Impersonate="no" |
| 747 | BinaryRef="wslinstall.dll" |
| 748 | DllEntry="RemoveRegistryKeyProtections" |
| 749 | Return="check" |
| 750 | Execute="deferred" |
| 751 | /> |
| 752 | |
| 753 | <CustomAction Id="UnregisterLspCategories" |
| 754 | Impersonate="no" |
| 755 | BinaryRef="wslinstall.dll" |
| 756 | DllEntry="UnregisterLspCategories" |
| 757 | Return="check" |
| 758 | Execute="deferred" |
| 759 | /> |
| 760 | |
| 761 | <CustomAction Id="InstallMsix.SetProperty" Return="check" Property="InstallMsix" Value='[DATABASE]' Execute='immediate' /> |
| 762 | <CustomAction Id="CalculateWslSettingsProtocolIds" Impersonate="no" BinaryRef="wslinstall.dll" DllEntry="CalculateWslSettingsProtocolIds" Return="check" Execute='immediate' /> |
| 763 | |
| 764 | <!-- Disable WSLService before StopServices so SCM rejects activation attempts |
| 765 | from COM clients while it is being stopped on uninstall. --> |
| 766 | <CustomAction Id="DisableWslService" Impersonate="no" BinaryRef="wslinstall.dll" DllEntry="DisableWslService" Return="ignore" Execute="deferred" /> |
| 767 | <CustomAction Id="EnableWslService" Impersonate="no" BinaryRef="wslinstall.dll" DllEntry="EnableWslService" Return="ignore" Execute="rollback" /> |
| 768 | |
| 769 | <!-- Test-only: forces install failure when WSL_TEST_FORCE_INSTALL_FAILURE=1 is passed to msiexec --> |
| 770 | <?if "${OFFICIAL_BUILD}" != "TRUE" ?> |
| 771 | <CustomAction Id="TestForceInstallFailure" |
| 772 | Impersonate="no" |
| 773 | BinaryRef="wslinstall.dll" |
| 774 | DllEntry="WslTestForceInstallFailure" |
| 775 | Return="check" |
| 776 | Execute="deferred" |
| 777 | /> |
| 778 | <?endif?> |
| 779 | |
| 780 | <!-- See https://learn.microsoft.com/en-us/windows/win32/msi/examples-of-conditional-statement-syntax --> |
| 781 | <InstallExecuteSequence> |
| 782 | <Custom Action="ValidateInstall" After="InstallInitialize" Condition="(not INSTALLED) and (not SKIPVALIDATION = 1)" /> |
| 783 | |
| 784 | <!-- Must run before InstallServices or else we'll fail if wslservice already exists. |
| 785 | Covers cases where: |
| 786 | - The MSI package is installed for the first time and the old MSIX needs to be removed |
| 787 | - The MSI package is uninstalled and the glue MSIX must be removed |
| 788 | |
| 789 | Must also run before CreateShortcuts since there might be an old MSIX shortcut that conflicts with ours. |
| 790 | Also, this action must not run during upgrades |
| 791 | since upgrades start by first uninstalling the package, this isn't run if UPGRADINGPRODUCTCODE is set in the 'removing' MSI process. |
| 792 | In this path, only the installing MSI process should run this action. |
| 793 | |
| 794 | We use 'BindImage' since its just before 'CreateShortcuts' in the install sequence |
| 795 | --> |
| 796 | <Custom Action="DeprovisionMsix" After="BindImage" Condition='((not INSTALLED) or (REMOVE~="ALL")) and (not UPGRADINGPRODUCTCODE) and (not SKIPMSIX = 1)'/> |
| 797 | |
| 798 | <!-- We need to remove the MSIX both as user and as system to work around a race condition in MSIX --> |
| 799 | <Custom Action="RemoveMsixAsUser" After="DeprovisionMsix" Condition='((not INSTALLED) or (REMOVE~="ALL")) and (not UPGRADINGPRODUCTCODE) and (not SKIPMSIX = 1)'/> |
| 800 | <Custom Action="RemoveMsixAsSystem" After="RemoveMsixAsUser" Condition='((not INSTALLED) or (REMOVE~="ALL")) and (not UPGRADINGPRODUCTCODE) and (not SKIPMSIX = 1)'/> |
| 801 | |
| 802 | <!-- This needs to run before the MSI logic tries to write the registry or create shortcuts--> |
| 803 | <Custom Action="CleanMsixState" After="RemoveMsixAsSystem" Condition='((not INSTALLED) or (not REMOVE~="ALL")) and (not UPGRADINGPRODUCTCODE)' /> |
| 804 | |
| 805 | <!-- This is needed to remove the SFGAO_NONENUMERATED flag from the explorer keys, which can prevent the WSL icon from being visible --> |
| 806 | <Custom Action="CleanExplorerState" Before="WriteRegistryValues" Condition='((not REMOVE~="ALL") or WIX_UPGRADE_DETECTED) and (not UPGRADINGPRODUCTCODE)' /> |
| 807 | |
| 808 | <!-- This needs to run before the registry is written since it removes registry protections that prevents MSI from writing to the registry key --> |
| 809 | <Custom Action="RemoveRegistryKeyProtections" After="CleanExplorerState" Condition='((not REMOVE~="ALL") or WIX_UPGRADE_DETECTED) and (not UPGRADINGPRODUCTCODE)' /> |
| 810 | |
| 811 | <!-- Runs during first install and upgrade |
| 812 | This action must not run if UPGRADINGPRODUCTCODE is set because it should only run during the second sequence |
| 813 | |
| 814 | Note: versions < 2.0.2 pass REINSTALL=ALL which sets REMOVE=ALL. |
| 815 | Use WIX_UPGRADE_DETECTED to cover this scenario since it's always set when a previous build is installed. |
| 816 | --> |
| 817 | <Custom Action="InstallMsix.SetProperty" After="CleanMsixState" Condition='((not REMOVE~="ALL") or WIX_UPGRADE_DETECTED) and (not UPGRADINGPRODUCTCODE) and (not SKIPMSIX = 1)' /> |
| 818 | <Custom Action="InstallMsix" After="InstallMsix.SetProperty" Condition='((not REMOVE~="ALL") or WIX_UPGRADE_DETECTED) and (not UPGRADINGPRODUCTCODE) and (not SKIPMSIX = 1)' /> |
| 819 | <Custom Action="InstallMsixAsUser" After="InstallMsix" Condition='((not REMOVE~="ALL") or WIX_UPGRADE_DETECTED) and (not UPGRADINGPRODUCTCODE) and (not SKIPMSIX = 1)' /> |
| 820 | |
| 821 | <!-- This needs to run after the registry is written because this action needs to read the install path --> |
| 822 | <Custom Action="RegisterLspCategories" After="WriteRegistryValues" Condition='((not REMOVE~="ALL") or WIX_UPGRADE_DETECTED) and (not UPGRADINGPRODUCTCODE) and (not SKIPLSP = 1)' /> |
| 823 | |
| 824 | <!-- This needs to run before the registry is cleared because this action needs to read the install path. |
| 825 | This actions runs on uninstallation and upgrade. --> |
| 826 | <Custom Action="UnregisterLspCategories" Before="RemoveRegistryValues" Condition='(REMOVE~="ALL") and (not UPGRADINGPRODUCTCODE) and (not SKIPLSP = 1)' /> |
| 827 | |
| 828 | <?if "${WSL_BUILD_WSL_SETTINGS}" = "true" ?> |
| 829 | <!-- This needs to run before the registry is written because this action calculates registry key names and values --> |
| 830 | <Custom Action="CalculateWslSettingsProtocolIds" Before="WriteRegistryValues" Condition='(not REMOVE~="ALL")' /> |
| 831 | <?endif?> |
| 832 | |
| 833 | <Custom Action="FinalizeInstall" After="PublishFeatures"/> |
| 834 | <?if "${OFFICIAL_BUILD}" != "TRUE" ?> |
| 835 | <Custom Action="TestForceInstallFailure" After="FinalizeInstall" Condition='WSL_TEST_FORCE_INSTALL_FAILURE = 1 and (not UPGRADINGPRODUCTCODE)' /> |
| 836 | <?endif?> |
| 837 | |
| 838 | <!-- Rollback CA must be sequenced before the forward action so it is registered |
| 839 | in the rollback script first. --> |
| 840 | <Custom Action="EnableWslService" Before="DisableWslService" Condition='REMOVE~="ALL"' /> |
| 841 | <Custom Action="DisableWslService" Before="StopServices" Condition='REMOVE~="ALL"' /> |
| 842 | |
| 843 | </InstallExecuteSequence> |
| 844 | |
| 845 | <!-- Don't show a 'Modify' button in settings since there is nothing to modify --> |
| 846 | <Property Id="ARPNOMODIFY" Value="yes" Secure="yes" /> |
| 847 | <Property Id="ARPSYSTEMCOMPONENT" Value="yes" Secure="yes" /> |
| 848 | |
| 849 | <!-- Setting REINSTALLMODE to AMUS will force all re-installed components to re-install all files, registry keys and shortcuts. |
| 850 | This is useful during downgrades since components with KeyPath set will not removed if their KeyPath points to valid file / registry key. |
| 851 | --> |
| 852 | <Property Id="REINSTALLMODE" Value="AMUS" Secure="yes" /> |
| 853 | |
| 854 | <!-- Force all applications to exit during upgrade. |
| 855 | See: https://learn.microsoft.com/en-us/windows/win32/msi/msirmshutdown |
| 856 | --> |
| 857 | <Property Id="MSIRMSHUTDOWN" Value="1" Secure="yes" /> |
| 858 | |
| 859 | <!-- Test-only: allows forcing install failure for rollback validation --> |
| 860 | <?if "${OFFICIAL_BUILD}" != "TRUE" ?> |
| 861 | <Property Id="WSL_TEST_FORCE_INSTALL_FAILURE" Secure="yes" /> |
| 862 | <?endif?> |
| 863 | </Package> |
| 864 | </Wix> |