master
in 864 lines 50.4 KB
Raw
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 &quot;%1&quot;" />
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 &gt; 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>