- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / host / installer / win / chromoting.wxs
1 <?xml version="1.0"?>
2 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
3
4   <?define EventSourceName = "chromoting" ?>
5   <?define ServiceName = "chromoting" ?>
6
7   <!-- TODO(alexeypa): There strings should be localized,
8        see http://crbug.com/121785 -->
9   <?if $(var.Branding) ~= Chrome ?>
10     <?define ChromotingHost = "Chrome Remote Desktop Host" ?>
11     <?define ChromotingServiceName = "Chrome Remote Desktop Service" ?>
12     <?define ChromotingServiceDescription = "This service enables incoming connections from Chrome Remote Desktop clients." ?>
13     <?define Manufacturer = "Google Inc." ?>
14   <?else?>
15     <?define ChromotingHost = "Chromoting Host" ?>
16     <?define ChromotingServiceName = "Chromoting Service" ?>
17     <?define ChromotingServiceDescription = "This service enables incoming connections from Chromoting clients." ?>
18     <?define Manufacturer = "The Chromium Authors" ?>
19   <?endif?>
20
21   <?define FirewallName = "$(var.ChromotingHost)" ?>
22
23   <?define OmahaAppid = "{b210701e-ffc4-49e3-932b-370728c72662}" ?>
24   <?define UpgradeCode = "2b21f767-e157-4fa6-963c-55834c1433a6" ?>
25
26   <?define CoreBinary = "remoting_core.dll" ?>
27   <?define HostBinary = "remoting_host.exe" ?>
28
29   <?define ChromotingTypelib = "{b6396c45-b0cc-456b-9f49-f12964ee6df4}" ?>
30
31   <!-- AppIDs used by the COM components. -->
32   <?define ControllerAppid = "{4ff35d5e-d226-4550-9248-03e7779e67de}" ?>
33   <?define RdpAppid = "{52e6fd1a-f16e-49c0-aacb-5436a915448b}" ?>
34
35   <?define ControllerClass = "ElevatedController Class" ?>
36   <?define ControllerProgid =
37       "ChromotingElevatedController.ElevatedController" ?>
38
39   <?define IRdpDesktopSessionId = "{6a7699f0-ee43-43e7-aa30-a6738f9bd470}" ?>
40   <?define IRdpDesktopSessionEventHandlerId =
41       "{b59b96da-83cb-40ee-9b91-c377400fc3e3}" ?>
42
43   <!--
44     The long hex value(s) below are security descriptors generated from SDDL
45     definition using the PowerShell script below:
46
47     $sddl = "<SDDL definition goes here>"
48     $i = ([wmiclass]"Win32_SecurityDescriptorHelper").SDDLToBinarySD($sddl).BinarySD
49     -join ($i | foreach {$_.ToString("X2")})
50   -->
51
52   <!--
53     A security descriptor that gives SYSTEM, built-in administrators and
54     LocalService accounts COM_RIGHTS_EXECUTE, COM_RIGHTS_EXECUTE_LOCAL, and
55     COM_RIGHTS_ACTIVATE_LOCAL rights. It specifies a mandatory label that
56     specifies "no execute up" policy for medium integrity level.
57
58     $sddl = "O:BAG:BAD:(A;;0xb;;;SY)(A;;0xb;;;BA)(A;;0xb;;;LS)S:(ML;;NX;;;ME)"
59   -->
60   <?define RdpSd = "010014807800000088000000140000003000000002001C000100000011001400040000000101000000000010002000000200480003000000000014000B000000010100000000000512000000000018000B00000001020000000000052000000020020000000014000B0000000101000000000005130000000102000000000005200000002002000001020000000000052000000020020000" ?>
61
62   <!-- Verify that all required parameters are defined. -->
63   <?ifndef ControllerClsid ?>
64     <?error ControllerClsid must be defined ?>
65   <?endif?>
66
67   <?ifndef RdpDesktopSessionClsid ?>
68     <?error RdpDesktopSessionClsid must be defined ?>
69   <?endif?>
70
71   <?ifndef Version ?>
72     <?error Version must be defined ?>
73   <?endif?>
74
75   <Product Id="*"
76            Language="1033"
77            Manufacturer="$(var.Manufacturer)"
78            Name="$(var.ChromotingHost)"
79            UpgradeCode="$(var.UpgradeCode)"
80            Version="$(var.Version)">
81
82     <Package Comments="$(var.ChromotingHost) Package"
83              Compressed="yes"
84              Description="$(var.ChromotingHost) Package"
85              InstallerVersion="200"
86              Manufacturer="$(var.Manufacturer)"
87              InstallScope="perMachine"/>
88
89     <Condition
90       Message="$(var.ChromotingHost) is only supported on Windows XP, Windows Server 2003, or higher.">
91       <![CDATA[Installed OR (VersionNT >= 501)]]>
92     </Condition>
93
94     <!-- The upgrade rules below could be expressed with MajorUpgrade element.
95          Unfortunately, there is a bug in WiX decompiler (Dark) corrupting
96          InstallExecuteSequence table. The installation compiled from
97          the disassembled .msi schedules RemoveExistingProducts after
98          InstallFinalize while the original installation schedules it after
99          InstallInitialize. Fortunately, the verbose version of the upgrade
100          rules below decompiles correctly, so we use it instead.
101          See http://crbug.com/145265 for more details.
102     -->
103     <Upgrade Id="$(var.UpgradeCode)">
104       <UpgradeVersion IncludeMinimum="no"
105                       Minimum="$(var.Version)"
106                       OnlyDetect="yes"
107                       Property="NEWERVERSIONDETECTED" />
108       <UpgradeVersion IncludeMaximum="yes"
109                       IncludeMinimum="yes"
110                       Maximum="$(var.Version)"
111                       Minimum="0.0.0.0"
112                       Property="OLDERVERSIONBEINGUPGRADED" />
113       <!-- Detect versions that didn't handle the usagestats value properly. -->
114       <UpgradeVersion IncludeMaximum="yes"
115                       IncludeMinimum="yes"
116                       Maximum="24.0.1312.29"
117                       Minimum="0.0.0.0"
118                       Property="BROKENUSAGESTATSVERSION" />
119     </Upgrade>
120
121     <Condition Message="A later version of [ProductName] is already installed. Setup will now exit.">
122       NOT NEWERVERSIONDETECTED
123     </Condition>
124
125     <Media Id="1" Cabinet="chromoting.cab" EmbedCab="yes"/>
126
127     <Directory Id="TARGETDIR" Name="SourceDir">
128       <Directory Id="ProgramFilesFolder">
129         <?if $(var.OfficialBuild) != 0 ?>
130           <Directory Id="program_files_google" Name="Google">
131             <Directory Id="chromoting" Name="Chrome Remote Desktop">
132               <Directory Id="binaries" Name="$(var.Version)"/>
133             </Directory>
134           </Directory>
135         <?else?>
136           <Directory Id="chromoting" Name="Chromoting">
137             <Directory Id="binaries" Name="$(var.Version)"/>
138           </Directory>
139         <?endif?>
140       </Directory>
141       <Directory Id="CommonAppDataFolder">
142         <?if $(var.OfficialBuild) != 0 ?>
143           <Directory Id="common_app_data_google" Name="Google">
144             <Directory Id="config_files" Name="Chrome Remote Desktop"/>
145           </Directory>
146         <?else?>
147           <Directory Id="config_files" Name="Chromoting"/>
148         <?endif?>
149       </Directory>
150     </Directory>
151
152     <DirectoryRef Id="binaries">
153       <Component Id="sas" Guid="*">
154         <File Id="sas.dll"
155               DiskId="1"
156               Name="sas.dll"
157               Vital="yes"/>
158       </Component>
159
160       <Component Id="remoting_core" Guid="*">
161         <File Id="$(var.CoreBinary)"
162               DiskId="1"
163               KeyPath="yes"
164               Name="$(var.CoreBinary)"
165               Vital="yes"/>
166
167         <util:EventSource xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
168                           Name="$(var.EventSourceName)"
169                           Log="Application"
170                           CategoryCount="1"
171                           CategoryMessageFile="[#$(var.CoreBinary)]"
172                           EventMessageFile="[#$(var.CoreBinary)]"
173                           SupportsErrors="yes"
174                           SupportsInformationals="yes"/>
175       </Component>
176
177       <Component Id="remoting_desktop" Guid="*">
178         <File Id="remoting_desktop.exe"
179               DiskId="1"
180               KeyPath="yes"
181               Name="remoting_desktop.exe"
182               Vital="yes"/>
183       </Component>
184
185       <Component Id="remoting_host" Guid="*">
186         <File Id="remoting_host.exe"
187               DiskId="1"
188               Name="remoting_host.exe"
189               Vital="yes"/>
190
191         <ServiceInstall Id="install_service"
192                         Type="ownProcess"
193                         Vital="yes"
194                         Name="$(var.ServiceName)"
195                         DisplayName="[chromoting_service_display_name]"
196                         Description="[chromoting_service_description]"
197                         Arguments="--type=daemon --host-config=&quot;[config_files]host.json&quot;"
198                         Start="demand"
199                         Account="LocalSystem"
200                         ErrorControl="ignore"
201                         Interactive="no">
202           <!-- Configure the service to restart after one minute when it
203                crashes.
204           -->
205           <util:ServiceConfig
206               xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
207               FirstFailureActionType="restart"
208               ResetPeriodInDays="1"
209               RestartServiceDelayInSeconds="60"
210               SecondFailureActionType="restart"
211               ThirdFailureActionType="restart"/>
212         </ServiceInstall>
213
214         <ServiceControl Id="start_service"
215                         Stop="both"
216                         Remove="uninstall"
217                         Name="$(var.ServiceName)"
218                         Wait="yes" />
219
220         <fire:FirewallException xmlns:fire="http://schemas.microsoft.com/wix/FirewallExtension"
221                                 Id="me2me_firewall_exception"
222                                 IgnoreFailure="yes"
223                                 Name="$(var.FirewallName)"
224                                 Profile="all"
225                                 Program="[#remoting_host.exe]"
226                                 Scope="any" />
227       </Component>
228
229       <?if $(var.OfficialBuild) != 0 ?>
230         <Component Id="omaha_registration" Guid="*">
231           <RegistryKey Id="omaha_client_key"
232                        Root="HKLM"
233                        Key="SOFTWARE\Google\Update\Clients\$(var.OmahaAppid)"
234                        Action="create">
235             <RegistryValue Type="string"
236                            Name="pv"
237                            Value="$(var.Version)"/>
238
239             <RegistryValue Type="string"
240                            Name="name"
241                            Value="$(var.ChromotingHost)"/>
242           </RegistryKey>
243         </Component>
244       <?endif?>
245
246       <Component Id="remoting_lib" Guid="*">
247         <RegistryKey Root="HKLM"
248                      Key="SOFTWARE\Classes">
249           <RegistryKey Key="AppId">
250             <RegistryKey Key="$(var.ControllerAppid)" Action="create">
251               <RegistryValue Type="string"
252                              Value="ChromotingElevatedController"/>
253             </RegistryKey>
254
255             <RegistryKey Key="$(var.RdpAppid)" Action="create">
256               <RegistryValue Type="string"
257                              Value="ChromotingRdpDesktopSession"/>
258               <RegistryValue Name="AccessPermission"
259                              Type="binary"
260                              Value="$(var.RdpSd)"/>
261               <RegistryValue Name="LaunchPermission"
262                              Type="binary"
263                              Value="$(var.RdpSd)"/>
264               <RegistryValue Name="RunAs"
265                              Type="string"
266                              Value="NT AUTHORITY\LocalService"/>
267             </RegistryKey>
268
269           </RegistryKey>
270
271           <RegistryKey Key="$(var.ControllerProgid)" Action="create">
272             <RegistryValue Type="string"
273                            Value="$(var.ControllerClass)"/>
274
275             <RegistryKey Key="CLSID" Action="create">
276               <RegistryValue Type="string"
277                              Value="$(var.ControllerClsid)"/>
278             </RegistryKey>
279
280             <RegistryKey Key="CurVer" Action="create">
281               <RegistryValue Type="string"
282                              Value="$(var.ControllerProgid).$(var.Version)"/>
283             </RegistryKey>
284           </RegistryKey>
285
286           <RegistryKey Key="$(var.ControllerProgid).$(var.Version)"
287                        Action="create">
288             <RegistryValue Type="string"
289                            Value="$(var.ControllerClass)"/>
290
291             <RegistryKey Key="CLSID" Action="create">
292               <RegistryValue Type="string"
293                              Value="$(var.ControllerClsid)"/>
294             </RegistryKey>
295           </RegistryKey>
296
297           <RegistryKey Key="CLSID">
298             <RegistryKey Key="$(var.ControllerClsid)" Action="create">
299               <RegistryValue Type="string"
300                              Value="$(var.ControllerClass)"/>
301
302               <RegistryValue Type="string"
303                              Name="AppID"
304                              Value="$(var.ControllerAppid)"/>
305
306               <RegistryValue Type="string"
307                              Name="LocalizedString"
308                              Value="@[binaries]$(var.CoreBinary),-103"/>
309
310               <RegistryKey Key="LocalServer32" Action="create">
311                 <RegistryValue Type="string"
312                                Value="[binaries]$(var.HostBinary) --type=controller"/>
313               </RegistryKey>
314
315               <RegistryKey Key="ProgID" Action="create">
316                 <RegistryValue Type="string"
317                                Value="$(var.ControllerProgid).$(var.Version)"/>
318               </RegistryKey>
319
320               <RegistryKey Key="TypeLib" Action="create">
321                 <RegistryValue Type="string"
322                                Value="$(var.ChromotingTypelib)"/>
323               </RegistryKey>
324
325               <RegistryKey Key="VersionIndependentProgID" Action="create">
326                 <RegistryValue Type="string"
327                                Value="$(var.ControllerProgid)"/>
328               </RegistryKey>
329
330               <RegistryKey Key="Elevation" Action="create">
331                 <RegistryValue Type="integer"
332                                Name="Enabled"
333                                Value="1"/>
334                 <RegistryValue Type="string"
335                                Name="IconReference"
336                                Value="@[binaries]$(var.CoreBinary),-104"/>
337               </RegistryKey>
338             </RegistryKey>
339             <RegistryKey Key="$(var.RdpDesktopSessionClsid)" Action="create">
340               <RegistryValue Type="string"
341                              Value="RdpDesktopSession Class"/>
342
343               <RegistryValue Type="string"
344                              Name="AppID"
345                              Value="$(var.RdpAppid)"/>
346
347               <RegistryKey Key="LocalServer32" Action="create">
348                 <RegistryValue Type="string"
349                                Value="[binaries]$(var.HostBinary) --type=rdp_desktop_session"/>
350               </RegistryKey>
351
352               <RegistryKey Key="TypeLib" Action="create">
353                 <RegistryValue Type="string"
354                                Value="$(var.ChromotingTypelib)"/>
355               </RegistryKey>
356             </RegistryKey>
357
358             <!-- IRdpDesktopSession PSFactory -->
359             <RegistryKey Key="$(var.IRdpDesktopSessionId)"
360                          Action="create">
361               <RegistryValue Type="string"
362                              Value="IRdpDesktopSession PSFactory"/>
363
364               <RegistryKey Key="InprocServer32" Action="create">
365                 <RegistryValue Type="string"
366                                Value="[binaries]$(var.CoreBinary)"/>
367               </RegistryKey>
368             </RegistryKey>
369
370             <!-- IRdpDesktopSessionEventHandler PSFactory -->
371             <RegistryKey Key="$(var.IRdpDesktopSessionEventHandlerId)"
372                          Action="create">
373               <RegistryValue Type="string"
374                              Value="IRdpDesktopSessionEventHandler PSFactory"/>
375
376               <RegistryKey Key="InprocServer32" Action="create">
377                 <RegistryValue Type="string"
378                                Value="[binaries]$(var.CoreBinary)"/>
379               </RegistryKey>
380             </RegistryKey>
381           </RegistryKey>
382
383           <RegistryKey Key="Interface">
384             <!-- IDaemonControl2 interface -->
385             <RegistryKey Key="{655bd819-c08c-4b04-80c2-f160739ff6ef}"
386                          Action="create">
387               <RegistryKey Key="ProxyStubClsid32" Action="create">
388                 <RegistryValue Type="string"
389                                Value="{00020424-0000-0000-C000-000000000046}"/>
390               </RegistryKey>
391
392               <RegistryKey Key="TypeLib" Action="create">
393                 <RegistryValue Type="string"
394                                Value="$(var.ChromotingTypelib)"/>
395               </RegistryKey>
396             </RegistryKey>
397
398             <!-- IDaemonControl interface -->
399             <RegistryKey Key="{e051a481-6345-4ba1-bdb1-cf7929955268}"
400                          Action="create">
401               <RegistryKey Key="ProxyStubClsid32" Action="create">
402                 <RegistryValue Type="string"
403                                Value="{00020424-0000-0000-C000-000000000046}"/>
404               </RegistryKey>
405
406               <RegistryKey Key="TypeLib" Action="create">
407                 <RegistryValue Type="string"
408                                Value="$(var.ChromotingTypelib)"/>
409               </RegistryKey>
410             </RegistryKey>
411
412             <!-- IRdpDesktopSession interface -->
413             <RegistryKey Key="$(var.IRdpDesktopSessionId)"
414                          Action="create">
415               <RegistryValue Type="string"
416                              Value="IRdpDesktopSession"/>
417               <RegistryKey Key="ProxyStubClsid32" Action="create">
418                 <RegistryValue Type="string"
419                                Value="$(var.IRdpDesktopSessionId)"/>
420               </RegistryKey>
421             </RegistryKey>
422
423             <!-- IRdpDesktopSessionEventHandler interface -->
424             <RegistryKey Key="$(var.IRdpDesktopSessionEventHandlerId)"
425                          Action="create">
426               <RegistryValue Type="string"
427                              Value="IRdpDesktopSessionEventHandler"/>
428               <RegistryKey Key="ProxyStubClsid32" Action="create">
429                 <RegistryValue Type="string"
430                                Value="$(var.IRdpDesktopSessionEventHandlerId)"/>
431               </RegistryKey>
432
433               <RegistryKey Key="TypeLib" Action="create">
434                 <RegistryValue Type="string"
435                                Value="$(var.ChromotingTypelib)"/>
436               </RegistryKey>
437             </RegistryKey>
438           </RegistryKey>
439
440           <RegistryKey Key="Typelib">
441             <RegistryKey Key="$(var.ChromotingTypelib)" Action="create">
442               <RegistryKey Key="1.0" Action="create">
443                 <RegistryValue Type="string"
444                                Value="Chromoting 1.0 Type Library"/>
445                 <RegistryKey Key="0" Action="create">
446                   <RegistryKey Key="win32" Action="create">
447                     <RegistryValue Type="string"
448                                    Value="[binaries]$(var.CoreBinary)"/>
449                   </RegistryKey>
450                 </RegistryKey>
451
452                 <RegistryKey Key="FLAGS" Action="create">
453                   <RegistryValue Type="string"
454                                  Value="0"/>
455                 </RegistryKey>
456
457                 <RegistryKey Key="HELPDIR" Action="create">
458                   <RegistryValue Type="string"
459                                  Value="[binaries]"/>
460                 </RegistryKey>
461               </RegistryKey>
462             </RegistryKey>
463           </RegistryKey>
464         </RegistryKey>
465
466       </Component>
467
468       <!-- Register with Sawbuck. See http://code.google.com/p/sawbuck/. -->
469       <Component Id="sawbuck_provider" Guid="*">
470         <RegistryKey Root="HKLM"
471                      Key="SOFTWARE\Google\Sawbuck\Providers">
472           <RegistryKey Key="{2db51ca1-4fd8-4b88-b5a2-fb8606b66b02}"
473                        Action="create">
474             <RegistryValue Type="string" Value="Chromoting"/>
475             <RegistryValue Name="default_flags" Type="integer" Value="1"/>
476             <RegistryValue Name="default_level" Type="integer" Value="4"/>
477             <RegistryKey Key="Flags" Action="create">
478               <RegistryKey Key="Stack Trace" Action="create">
479                 <RegistryValue Type="integer" Value="1"/>
480               </RegistryKey>
481               <RegistryKey Key="Text Only" Action="create">
482                 <RegistryValue Type="integer" Value="2"/>
483               </RegistryKey>
484             </RegistryKey>
485           </RegistryKey>
486         </RegistryKey>
487       </Component>
488
489       <!-- Delete the usagestats flag to reset the crash dump reporting settings
490            for existing users. -->
491       <Component Id="delete_usagestats"
492                  Guid="5c73f2b9-b865-426f-81cc-90a27ebb54aa"
493                  KeyPath="yes">
494         <Condition>BROKENUSAGESTATSVERSION</Condition>
495         <RemoveRegistryValue
496             Id="usagestats"
497             Key="SOFTWARE\Google\Update\ClientStateMedium\$(var.OmahaAppid)"
498             Name="usagestats"
499             Root="HKLM" />
500       </Component>
501
502     </DirectoryRef>
503
504     <DirectoryRef Id="config_files">
505       <!-- Delete debug.log from previous versions -->
506       <Component Id="delete_debug_log"
507                  Guid="b309082a-e6fa-4dc7-98e4-3d83c896561d">
508         <RemoveFile Id="debug.log"
509                     Name="debug.log"
510                     On="both" />
511       </Component>
512     </DirectoryRef>
513
514     <!-- The service is always installed in the stopped state with start type
515          set to 'manual'. This becomes a problem when upgrading an existing
516          installation that is configured to start the service automatically.
517
518          Here we check the startup type before making any changes, then restart
519          the service and change its startup type as needed once the installation
520          is finished. -->
521     <Property Id="CHROMOTING_SERVICE_START_TYPE">
522       <RegistrySearch Id="chromoting_service_start_type"
523                       Root="HKLM"
524                       Key="SYSTEM\CurrentControlSet\services\$(var.ServiceName)"
525                       Name="Start"
526                       Type="raw" />
527     </Property>
528
529     <CustomAction Id="query_auto_start_service"
530                   Property="auto_start_service"
531                   Value="[CHROMOTING_SERVICE_START_TYPE]" />
532
533     <CustomAction Id="set_auto_start_service"
534                   Impersonate="no"
535                   Execute="deferred"
536                   Script="jscript">
537       <![CDATA[
538         var controller = new ActiveXObject("$(var.ControllerProgid)");
539         controller.StartDaemon();
540       ]]>
541     </CustomAction>
542
543     <CustomAction Id="set_service_display_name"
544                   Property="chromoting_service_display_name"
545                   Value="@[binaries]$(var.CoreBinary),-101" />
546     <CustomAction Id="set_service_description"
547                   Property="chromoting_service_description"
548                   Value="@[binaries]$(var.CoreBinary),-102" />
549
550     <!-- XP does not support MUI strings in the service name and description, so
551          we fall back to plain strings on XP. -->
552     <CustomAction Id="set_service_display_name_xp"
553                   Property="chromoting_service_display_name"
554                   Value="$(var.ChromotingServiceName)" />
555     <CustomAction Id="set_service_description_xp"
556                   Property="chromoting_service_description"
557                   Value="$(var.ChromotingServiceDescription)" />
558
559     <UIRef Id="WixUI_ErrorProgressText" />
560
561     <Feature Id="chromoting_host" Level="1" Title="$(var.ChromotingHost)">
562       <ComponentRef Id="delete_debug_log"/>
563       <ComponentRef Id="delete_usagestats"/>
564       <?if $(var.OfficialBuild) != 0 ?>
565         <ComponentRef Id="omaha_registration"/>
566       <?endif?>
567       <ComponentRef Id="remoting_core"/>
568       <ComponentRef Id="remoting_desktop"/>
569       <ComponentRef Id="remoting_host"/>
570       <ComponentRef Id="remoting_lib"/>
571       <ComponentRef Id="sas"/>
572       <ComponentRef Id="sawbuck_provider"/>
573     </Feature>
574
575     <!-- Set the icon shown in Add/Remove Programs. -->
576     <Icon Id="chromoting.ico" SourceFile="chromoting.ico"/>
577     <Property Id="ARPPRODUCTICON" Value="chromoting.ico" />
578
579     <InstallExecuteSequence>
580       <Custom Action="query_auto_start_service" Before="InstallInitialize"/>
581       <Custom Action="set_auto_start_service" After="StartServices">
582         <![CDATA[NOT REMOVE AND (auto_start_service = "#2")]]>
583       </Custom>
584
585       <!-- Set the serivce name and description -->
586       <Custom Action="set_service_display_name_xp" Before="InstallInitialize">
587         <![CDATA[VersionNT < 600]]>
588       </Custom>
589       <Custom Action="set_service_description_xp" Before="InstallInitialize">
590         <![CDATA[VersionNT < 600]]>
591       </Custom>
592       <Custom Action="set_service_display_name" Before="InstallInitialize">
593         <![CDATA[VersionNT >= 600]]>
594       </Custom>
595       <Custom Action="set_service_description" Before="InstallInitialize">
596         <![CDATA[VersionNT >= 600]]>
597       </Custom>
598
599       <!-- Schedule RemoveExistingProducts before installing any files.
600            See http://msdn.microsoft.com/en-us/library/aa371197.aspx. -->
601       <RemoveExistingProducts After="InstallInitialize" />
602     </InstallExecuteSequence>
603   </Product>
604 </Wix>