blob: ab009b08d95dc51595a6bbe1e0bc7755c9f5e414 [file] [log] [blame]
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<!-- Note: Including Win64 components in a 32-bit installer usually triggers
a consistency error. We suppress that error in our build to allow the
installer to set 64-bit registry keys on 64-bit Windows. Care must be
taken when adding Win64 components to ensure they are not installed on
32-bit Windows. -->
<?define EventSourceName = "chromoting" ?>
<?define ServiceName = "chromoting" ?>
<!-- TODO(alexeypa): There strings should be localized,
see http://crbug.com/121785 -->
<?if $(var.Branding) ~= Chrome ?>
<?define ChromotingHost = "Chrome Remote Desktop Host" ?>
<?define Manufacturer = "Google Inc." ?>
<?else?>
<?define ChromotingHost = "Chromoting Host" ?>
<?define Manufacturer = "The Chromium Authors" ?>
<?endif?>
<?if $(sys.BUILDARCH) = "x64" ?>
<?define ProgramFilesFolderForPlatform = "ProgramFiles64Folder" ?>
<?else?>
<?define ProgramFilesFolderForPlatform = "ProgramFilesFolder" ?>
<?endif?>
<?if $(var.OfficialBuild) != 0 ?>
<?define ChromotingKeyPath = "Google\Chrome Remote Desktop" ?>
<?else?>
<?define ChromotingKeyPath = "Chromoting" ?>
<?endif?>
<?define FirewallName = "$(var.ChromotingHost)" ?>
<?define OmahaAppid = "{b210701e-ffc4-49e3-932b-370728c72662}" ?>
<?define UpgradeCode = "2b21f767-e157-4fa6-963c-55834c1433a6" ?>
<?define CoreBinary = "remoting_core.dll" ?>
<?define HostBinary = "remoting_host.exe" ?>
<?define RemoteSecurityKeyBinary = "remote_security_key.exe" ?>
<?define ChromotingTypelib = "{b6396c45-b0cc-456b-9f49-f12964ee6df4}" ?>
<!-- AppIDs used by the COM components. -->
<?define RdpAppid = "{52e6fd1a-f16e-49c0-aacb-5436a915448b}" ?>
<?define IRdpDesktopSessionId = "{6a7699f0-ee43-43e7-aa30-a6738f9bd470}" ?>
<?define IRdpDesktopSessionEventHandlerId =
"{b59b96da-83cb-40ee-9b91-c377400fc3e3}" ?>
<!--
The long hex value(s) below are security descriptors generated from SDDL
definition using the PowerShell script below:
$sddl = "<SDDL definition goes here>"
$i = ([wmiclass]"Win32_SecurityDescriptorHelper").SDDLToBinarySD($sddl).BinarySD
-join ($i | foreach {$_.ToString("X2")})
-->
<!--
A security descriptor that gives SYSTEM, built-in administrators and
LocalService accounts COM_RIGHTS_EXECUTE, COM_RIGHTS_EXECUTE_LOCAL, and
COM_RIGHTS_ACTIVATE_LOCAL rights. It specifies a mandatory label that
specifies "no execute up" policy for medium integrity level.
$sddl = "O:BAG:BAD:(A;;0xb;;;SY)(A;;0xb;;;BA)(A;;0xb;;;LS)S:(ML;;NX;;;ME)"
-->
<?define RdpSd = "010014807800000088000000140000003000000002001C000100000011001400040000000101000000000010002000000200480003000000000014000B000000010100000000000512000000000018000B00000001020000000000052000000020020000000014000B0000000101000000000005130000000102000000000005200000002002000001020000000000052000000020020000" ?>
<!-- Verify that all required parameters are defined. -->
<?ifndef RdpDesktopSessionClsid ?>
<?error RdpDesktopSessionClsid must be defined ?>
<?endif?>
<?ifndef Version ?>
<?error Version must be defined ?>
<?endif?>
<Product Id="*"
Language="1033"
Manufacturer="$(var.Manufacturer)"
Name="$(var.ChromotingHost)"
UpgradeCode="$(var.UpgradeCode)"
Version="$(var.Version)">
<Package Comments="$(var.ChromotingHost) Package"
Compressed="yes"
Description="$(var.ChromotingHost) Package"
InstallerVersion="200"
Manufacturer="$(var.Manufacturer)"
InstallScope="perMachine"/>
<PropertyRef Id="WIX_ACCOUNT_LOCALSYSTEM" />
<PropertyRef Id="WIX_ACCOUNT_ADMINISTRATORS" />
<Condition
Message="$(var.ChromotingHost) is only supported on Windows 7 and above.">
<![CDATA[Installed OR (VersionNT >= 601)]]>
</Condition>
<!-- The upgrade rules below could be expressed with MajorUpgrade element.
Unfortunately, there is a bug in WiX decompiler (Dark) corrupting
InstallExecuteSequence table. The installation compiled from
the disassembled .msi schedules RemoveExistingProducts after
InstallFinalize while the original installation schedules it after
InstallInitialize. Fortunately, the verbose version of the upgrade
rules below decompiles correctly, so we use it instead.
See http://crbug.com/145265 for more details.
-->
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion IncludeMinimum="no"
Minimum="$(var.Version)"
OnlyDetect="yes"
Property="NEWERVERSIONDETECTED" />
<UpgradeVersion IncludeMaximum="yes"
IncludeMinimum="yes"
Maximum="$(var.Version)"
Minimum="0.0.0.0"
Property="OLDERVERSIONBEINGUPGRADED" />
<!-- Detect versions that didn't handle the usagestats value properly. -->
<UpgradeVersion IncludeMaximum="yes"
IncludeMinimum="yes"
Maximum="24.0.1312.29"
Minimum="0.0.0.0"
Property="BROKENUSAGESTATSVERSION" />
</Upgrade>
<Condition Message="A later version of [ProductName] is already installed. Setup will now exit.">
NOT NEWERVERSIONDETECTED
</Condition>
<Media Id="1" Cabinet="chromoting.cab" EmbedCab="yes"/>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.ProgramFilesFolderForPlatform)">
<?if $(var.OfficialBuild) != 0 ?>
<Directory Id="program_files_google" Name="Google">
<Directory Id="chromoting" Name="Chrome Remote Desktop">
<Directory Id="binaries" Name="$(var.Version)"/>
</Directory>
</Directory>
<?else?>
<Directory Id="chromoting" Name="Chromoting">
<Directory Id="binaries" Name="$(var.Version)"/>
</Directory>
<?endif?>
</Directory>
<Directory Id="CommonAppDataFolder">
<?if $(var.OfficialBuild) != 0 ?>
<Directory Id="common_app_data_google" Name="Google">
<Directory Id="config_files" Name="Chrome Remote Desktop"/>
</Directory>
<?else?>
<Directory Id="config_files" Name="Chromoting"/>
<?endif?>
</Directory>
</Directory>
<DirectoryRef Id="binaries">
<Component Id="credits" Guid="*">
<File Id="CREDITS.txt"
DiskId="1"
Name="CREDITS.txt"
Vital="yes"/>
</Component>
<Component Id="remoting_core" Guid="*">
<File Id="$(var.CoreBinary)"
DiskId="1"
KeyPath="yes"
Name="$(var.CoreBinary)"
Vital="yes"/>
<util:EventSource xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
Name="$(var.EventSourceName)"
Log="Application"
CategoryCount="1"
CategoryMessageFile="[#$(var.CoreBinary)]"
EventMessageFile="[#$(var.CoreBinary)]"
SupportsErrors="yes"
SupportsInformationals="yes"/>
</Component>
<Component Id="remoting_desktop" Guid="*">
<File Id="remoting_desktop.exe"
DiskId="1"
KeyPath="yes"
Name="remoting_desktop.exe"
Vital="yes"/>
</Component>
<Component Id="remoting_native_messaging_host" Guid="*">
<File Id="remoting_native_messaging_host.exe"
DiskId="1"
KeyPath="yes"
Name="remoting_native_messaging_host.exe"
Vital="yes"/>
</Component>
<Component Id="remoting_start_host" Guid="*">
<File Id="remoting_start_host.exe"
DiskId="1"
KeyPath="yes"
Name="remoting_start_host.exe"
Vital="yes"/>
</Component>
<Component Id="remote_assistance_host" Guid="*">
<File Id="remote_assistance_host.exe"
DiskId="1"
KeyPath="yes"
Name="remote_assistance_host.exe"
Vital="yes"/>
</Component>
<Component Id="remote_assistance_host_uiaccess" Guid="*">
<File Id="remote_assistance_host_uiaccess.exe"
DiskId="1"
KeyPath="yes"
Name="remote_assistance_host_uiaccess.exe"
Vital="yes"/>
</Component>
<Component Id="native_messaging_host_manifest" Guid="*">
<File Id="com.google.chrome.remote_desktop.json"
DiskId="1"
KeyPath="yes"
Name="com.google.chrome.remote_desktop.json"
Vital="yes"/>
</Component>
<Component Id="native_messaging_host_firefox_manifest" Guid="*">
<File Id="com.google.chrome.remote_desktop_firefox.json"
DiskId="1"
KeyPath="yes"
Name="com.google.chrome.remote_desktop-firefox.json"
Vital="yes"/>
</Component>
<Component Id="remote_assistance_host_manifest" Guid="*">
<File Id="com.google.chrome.remote_assistance.json"
DiskId="1"
KeyPath="yes"
Name="com.google.chrome.remote_assistance.json"
Vital="yes"/>
</Component>
<Component Id="remote_assistance_host_firefox_manifest" Guid="*">
<File Id="com.google.chrome.remote_assistance_firefox.json"
DiskId="1"
KeyPath="yes"
Name="com.google.chrome.remote_assistance-firefox.json"
Vital="yes"/>
</Component>
<Component Id="icudtl" Guid="*">
<File Id="icudtl.dat"
DiskId="1"
KeyPath="yes"
Name="icudtl.dat"
Vital="yes"/>
</Component>
<Component Id="remoting_host" Guid="*">
<File Id="remoting_host.exe"
DiskId="1"
Name="remoting_host.exe"
Vital="yes"/>
<ServiceInstall Id="install_service"
Type="ownProcess"
Vital="yes"
Name="$(var.ServiceName)"
DisplayName="[chromoting_service_display_name]"
Description="[chromoting_service_description]"
Arguments="--type=daemon --host-config=&quot;[config_files]host.json&quot;"
Start="demand"
Account="LocalSystem"
ErrorControl="ignore"
Interactive="no">
<!-- Configure the service to restart after one minute when it
crashes.
-->
<util:ServiceConfig
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
FirstFailureActionType="restart"
ResetPeriodInDays="1"
RestartServiceDelayInSeconds="60"
SecondFailureActionType="restart"
ThirdFailureActionType="restart"/>
</ServiceInstall>
<ServiceControl Id="start_service"
Stop="both"
Remove="uninstall"
Name="$(var.ServiceName)"
Wait="yes" />
<fire:FirewallException xmlns:fire="http://schemas.microsoft.com/wix/FirewallExtension"
Id="me2me_firewall_exception"
IgnoreFailure="yes"
Name="$(var.FirewallName)"
Profile="all"
Program="[#remoting_host.exe]"
Scope="any" />
</Component>
<Component Id="remote_security_key" Guid="*">
<File Id="$(var.RemoteSecurityKeyBinary)"
DiskId="1"
KeyPath="yes"
Name="$(var.RemoteSecurityKeyBinary)"
Vital="yes"/>
</Component>
<Component Id="remote_security_key_registration" Guid="*">
<RegistryKey Id="remote_security_key_reg_key"
Root="HKLM"
Key="SOFTWARE\Google\SecurityKey"
Action="create">
<RegistryValue Type="string"
Name="RemoteSecurityKeyPath"
Value="[binaries]$(var.RemoteSecurityKeyBinary)"/>
</RegistryKey>
</Component>
<?if $(var.OfficialBuild) != 0 ?>
<Component Id="omaha_registration" Guid="*">
<RegistryKey Id="omaha_client_key"
Root="HKLM"
Key="SOFTWARE\Google\Update\Clients\$(var.OmahaAppid)"
Action="create">
<RegistryValue Type="string"
Name="pv"
Value="$(var.Version)"/>
<RegistryValue Type="string"
Name="name"
Value="$(var.ChromotingHost)"/>
</RegistryKey>
</Component>
<?endif?>
<Component Id="remoting_lib" Guid="*">
<RegistryKey Root="HKLM"
Key="SOFTWARE\Classes">
<RegistryKey Key="AppId">
<RegistryKey Key="$(var.RdpAppid)" Action="create">
<RegistryValue Type="string"
Value="ChromotingRdpDesktopSession"/>
<RegistryValue Name="AccessPermission"
Type="binary"
Value="$(var.RdpSd)"/>
<RegistryValue Name="LaunchPermission"
Type="binary"
Value="$(var.RdpSd)"/>
<RegistryValue Name="RunAs"
Type="string"
Value="NT AUTHORITY\LocalService"/>
</RegistryKey>
</RegistryKey>
<RegistryKey Key="CLSID">
<RegistryKey Key="$(var.RdpDesktopSessionClsid)" Action="create">
<RegistryValue Type="string"
Value="RdpDesktopSession Class"/>
<RegistryValue Type="string"
Name="AppID"
Value="$(var.RdpAppid)"/>
<RegistryKey Key="LocalServer32" Action="create">
<RegistryValue Type="string"
Value="[binaries]$(var.HostBinary) --type=rdp_desktop_session"/>
</RegistryKey>
<RegistryKey Key="TypeLib" Action="create">
<RegistryValue Type="string"
Value="$(var.ChromotingTypelib)"/>
</RegistryKey>
</RegistryKey>
<!-- IRdpDesktopSession PSFactory -->
<RegistryKey Key="$(var.IRdpDesktopSessionId)"
Action="create">
<RegistryValue Type="string"
Value="IRdpDesktopSession PSFactory"/>
<RegistryKey Key="InprocServer32" Action="create">
<RegistryValue Type="string"
Value="[binaries]$(var.CoreBinary)"/>
</RegistryKey>
</RegistryKey>
<!-- IRdpDesktopSessionEventHandler PSFactory -->
<RegistryKey Key="$(var.IRdpDesktopSessionEventHandlerId)"
Action="create">
<RegistryValue Type="string"
Value="IRdpDesktopSessionEventHandler PSFactory"/>
<RegistryKey Key="InprocServer32" Action="create">
<RegistryValue Type="string"
Value="[binaries]$(var.CoreBinary)"/>
</RegistryKey>
</RegistryKey>
</RegistryKey>
<RegistryKey Key="Interface">
<!-- IDaemonControl2 interface -->
<RegistryKey Key="{655bd819-c08c-4b04-80c2-f160739ff6ef}"
Action="create">
<RegistryKey Key="ProxyStubClsid32" Action="create">
<RegistryValue Type="string"
Value="{00020424-0000-0000-C000-000000000046}"/>
</RegistryKey>
<RegistryKey Key="TypeLib" Action="create">
<RegistryValue Type="string"
Value="$(var.ChromotingTypelib)"/>
</RegistryKey>
</RegistryKey>
<!-- IDaemonControl interface -->
<RegistryKey Key="{e051a481-6345-4ba1-bdb1-cf7929955268}"
Action="create">
<RegistryKey Key="ProxyStubClsid32" Action="create">
<RegistryValue Type="string"
Value="{00020424-0000-0000-C000-000000000046}"/>
</RegistryKey>
<RegistryKey Key="TypeLib" Action="create">
<RegistryValue Type="string"
Value="$(var.ChromotingTypelib)"/>
</RegistryKey>
</RegistryKey>
<!-- IRdpDesktopSession interface -->
<RegistryKey Key="$(var.IRdpDesktopSessionId)"
Action="create">
<RegistryValue Type="string"
Value="IRdpDesktopSession"/>
<RegistryKey Key="ProxyStubClsid32" Action="create">
<RegistryValue Type="string"
Value="$(var.IRdpDesktopSessionId)"/>
</RegistryKey>
</RegistryKey>
<!-- IRdpDesktopSessionEventHandler interface -->
<RegistryKey Key="$(var.IRdpDesktopSessionEventHandlerId)"
Action="create">
<RegistryValue Type="string"
Value="IRdpDesktopSessionEventHandler"/>
<RegistryKey Key="ProxyStubClsid32" Action="create">
<RegistryValue Type="string"
Value="$(var.IRdpDesktopSessionEventHandlerId)"/>
</RegistryKey>
<RegistryKey Key="TypeLib" Action="create">
<RegistryValue Type="string"
Value="$(var.ChromotingTypelib)"/>
</RegistryKey>
</RegistryKey>
</RegistryKey>
<RegistryKey Key="Typelib">
<RegistryKey Key="$(var.ChromotingTypelib)" Action="create">
<RegistryKey Key="1.0" Action="create">
<RegistryValue Type="string"
Value="Chromoting 1.0 Type Library"/>
<RegistryKey Key="0" Action="create">
<RegistryKey Key="win32" Action="create">
<RegistryValue Type="string"
Value="[binaries]$(var.CoreBinary)"/>
</RegistryKey>
</RegistryKey>
<RegistryKey Key="FLAGS" Action="create">
<RegistryValue Type="string"
Value="0"/>
</RegistryKey>
<RegistryKey Key="HELPDIR" Action="create">
<RegistryValue Type="string"
Value="[binaries]"/>
</RegistryKey>
</RegistryKey>
</RegistryKey>
</RegistryKey>
</RegistryKey>
</Component>
<!-- Creates the pairing registry store and protect it with an ACL. -->
<Component Id="remoting_pairing_registry" Guid="960bc7eb-a816-428b-90e8-ad13336955d5">
<RegistryKey Root="HKLM"
Key="SOFTWARE\$(var.ChromotingKeyPath)\paired-clients"
Action="create">
<RegistryKey Key="clients" Action="create"/>
<RegistryKey Key="secrets" Action="create">
<!-- Gives full access to SYSTEM only. -->
<!-- Cannot use the builtin PermissionEx element because it maps
to the MsiLockPermissionsEx table which is not supported on
Windows Installer version 4.5 or lower. Also Cannot use
PermissionEx in WixUtilExtension because it automatically
inherits all the ACLs from the parent. -->
<Permission User="[WIX_ACCOUNT_LOCALSYSTEM]"
GenericAll="yes"
ChangePermission="yes"
TakeOwnership="yes"/>
<Permission User="[WIX_ACCOUNT_ADMINISTRATORS]"
GenericAll="yes"
ChangePermission="yes"
TakeOwnership="yes"/>
</RegistryKey>
</RegistryKey>
<CreateFolder/>
</Component>
<Component Id="native_messaging_host_registry" Guid="*">
<RegistryKey Root="HKLM"
Key="SOFTWARE\Google\chrome\NativeMessagingHosts"
Action="create">
<RegistryKey Key="com.google.chrome.remote_desktop" Action="create">
<RegistryValue
Type="string"
Value="[binaries]com.google.chrome.remote_desktop.json"/>
</RegistryKey>
</RegistryKey>
<CreateFolder/>
</Component>
<!-- Firefox requires the key to be installed in the native registry -->
<Component Id="native_messaging_host_firefox_registry_win32"
Guid="*"
Win64="no">
<Condition>NOT Msix64</Condition>
<RegistryKey Root="HKLM"
Key="SOFTWARE\Mozilla\NativeMessagingHosts"
Action="create">
<RegistryKey Key="com.google.chrome.remote_desktop" Action="create">
<RegistryValue
Type="string"
Value="[binaries]com.google.chrome.remote_desktop-firefox.json"/>
</RegistryKey>
</RegistryKey>
<CreateFolder/>
</Component>
<Component Id="native_messaging_host_firefox_registry_win64"
Guid="*"
Win64="yes">
<Condition>Msix64</Condition>
<RegistryKey Root="HKLM"
Key="SOFTWARE\Mozilla\NativeMessagingHosts"
Action="create">
<RegistryKey Key="com.google.chrome.remote_desktop" Action="create">
<RegistryValue
Type="string"
Value="[binaries]com.google.chrome.remote_desktop-firefox.json"/>
</RegistryKey>
</RegistryKey>
<CreateFolder/>
</Component>
<Component Id="remote_assistance_host_registry" Guid="*">
<RegistryKey Root="HKLM"
Key="SOFTWARE\Google\chrome\NativeMessagingHosts"
Action="create">
<RegistryKey Key="com.google.chrome.remote_assistance"
Action="create">
<RegistryValue
Type="string"
Value="[binaries]com.google.chrome.remote_assistance.json"/>
</RegistryKey>
</RegistryKey>
<CreateFolder/>
</Component>
<Component Id="remote_assistance_host_firefox_registry_win32"
Guid="*"
Win64="no">
<Condition>NOT Msix64</Condition>
<RegistryKey Root="HKLM"
Key="SOFTWARE\Mozilla\NativeMessagingHosts"
Action="create">
<RegistryKey Key="com.google.chrome.remote_assistance"
Action="create">
<RegistryValue
Type="string"
Value="[binaries]com.google.chrome.remote_assistance-firefox.json"/>
</RegistryKey>
</RegistryKey>
<CreateFolder/>
</Component>
<Component Id="remote_assistance_host_firefox_registry_win64"
Guid="*"
Win64="yes">
<Condition>Msix64</Condition>
<RegistryKey Root="HKLM"
Key="SOFTWARE\Mozilla\NativeMessagingHosts"
Action="create">
<RegistryKey Key="com.google.chrome.remote_assistance"
Action="create">
<RegistryValue
Type="string"
Value="[binaries]com.google.chrome.remote_assistance-firefox.json"/>
</RegistryKey>
</RegistryKey>
<CreateFolder/>
</Component>
<!-- Delete the usagestats flag to reset the crash dump reporting settings
for existing users. -->
<Component Id="delete_usagestats"
Guid="5c73f2b9-b865-426f-81cc-90a27ebb54aa"
KeyPath="yes">
<Condition>BROKENUSAGESTATSVERSION</Condition>
<RemoveRegistryValue
Id="usagestats"
Key="SOFTWARE\Google\Update\ClientStateMedium\$(var.OmahaAppid)"
Name="usagestats"
Root="HKLM" />
</Component>
</DirectoryRef>
<!-- Register with Sawbuck. See http://code.google.com/p/sawbuck/. -->
<DirectoryRef Id="TARGETDIR">
<Component Id="sawbuck_provider" Guid="*" Win64="no">
<RegistryKey Root="HKLM"
Key="SOFTWARE\Google\Sawbuck\Providers">
<RegistryKey Key="{2db51ca1-4fd8-4b88-b5a2-fb8606b66b02}"
Action="create">
<RegistryValue Type="string" Value="Chromoting"/>
<RegistryValue Name="default_flags" Type="integer" Value="1"/>
<RegistryValue Name="default_level" Type="integer" Value="4"/>
<RegistryKey Key="Flags" Action="create">
<RegistryKey Key="Stack Trace" Action="create">
<RegistryValue Type="integer" Value="1"/>
</RegistryKey>
<RegistryKey Key="Text Only" Action="create">
<RegistryValue Type="integer" Value="2"/>
</RegistryKey>
</RegistryKey>
</RegistryKey>
</RegistryKey>
</Component>
</DirectoryRef>
<DirectoryRef Id="config_files">
<!-- Delete debug.log from previous versions -->
<Component Id="delete_debug_log"
Guid="b309082a-e6fa-4dc7-98e4-3d83c896561d">
<RemoveFile Id="debug.log"
Name="debug.log"
On="both" />
</Component>
</DirectoryRef>
<!-- The service is always installed in the stopped state with start type
set to 'manual'. This becomes a problem when upgrading an existing
installation that is configured to start the service automatically.
Here we check the startup type before making any changes, then restart
the service as needed once the installation is finished. -->
<Property Id="CHROMOTING_SERVICE_START_TYPE">
<RegistrySearch Id="chromoting_service_start_type"
Root="HKLM"
Key="SYSTEM\CurrentControlSet\services\$(var.ServiceName)"
Name="Start"
Type="raw" />
</Property>
<CustomAction Id="query_auto_start_service"
Property="auto_start_service"
Value="[CHROMOTING_SERVICE_START_TYPE]" />
<CustomAction Id="start_chromoting_service"
Impersonate="no"
Execute="deferred"
Script="jscript">
<![CDATA[
var ADS_SERVICE_STOPPED = 0x00000001;
var ADS_SERVICE_AUTO_START = 2;
var service = GetObject("WinNT://./$(var.ServiceName),Service");
service.StartType = ADS_SERVICE_AUTO_START;
service.SetInfo();
if (service.Status == ADS_SERVICE_STOPPED) {
service.Start();
}
]]>
</CustomAction>
<CustomAction Id="set_service_display_name"
Property="chromoting_service_display_name"
Value="@[binaries]$(var.CoreBinary),-101" />
<CustomAction Id="set_service_description"
Property="chromoting_service_description"
Value="@[binaries]$(var.CoreBinary),-102" />
<UIRef Id="WixUI_ErrorProgressText" />
<Feature Id="chromoting_host" Level="1" Title="$(var.ChromotingHost)">
<ComponentRef Id="credits"/>
<ComponentRef Id="delete_debug_log"/>
<ComponentRef Id="delete_usagestats"/>
<?if $(var.OfficialBuild) != 0 ?>
<ComponentRef Id="omaha_registration"/>
<?endif?>
<ComponentRef Id="icudtl"/>
<ComponentRef Id="native_messaging_host_firefox_manifest"/>
<ComponentRef Id="native_messaging_host_firefox_registry_win32"/>
<ComponentRef Id="native_messaging_host_firefox_registry_win64"/>
<ComponentRef Id="native_messaging_host_manifest"/>
<ComponentRef Id="native_messaging_host_registry"/>
<ComponentRef Id="remote_assistance_host"/>
<ComponentRef Id="remote_assistance_host_firefox_manifest"/>
<ComponentRef Id="remote_assistance_host_firefox_registry_win32"/>
<ComponentRef Id="remote_assistance_host_firefox_registry_win64"/>
<ComponentRef Id="remote_assistance_host_manifest"/>
<ComponentRef Id="remote_assistance_host_registry"/>
<ComponentRef Id="remote_assistance_host_uiaccess"/>
<ComponentRef Id="remote_security_key"/>
<ComponentRef Id="remote_security_key_registration"/>
<ComponentRef Id="remoting_native_messaging_host"/>
<ComponentRef Id="remoting_core"/>
<ComponentRef Id="remoting_desktop"/>
<ComponentRef Id="remoting_host"/>
<ComponentRef Id="remoting_lib"/>
<ComponentRef Id="remoting_pairing_registry"/>
<ComponentRef Id="remoting_start_host"/>
<ComponentRef Id="sawbuck_provider"/>
</Feature>
<!-- Set the icon shown in Add/Remove Programs. -->
<Icon Id="chromoting.ico" SourceFile="chromoting.ico"/>
<Property Id="ARPPRODUCTICON" Value="chromoting.ico" />
<CustomAction Id="set_maintenance" Property="MAINTENANCE" Value="true" />
<!-- Set to reinstall all features. -->
<CustomAction Id="set_reinstall_all_property"
Property="REINSTALL"
Value="ALL" />
<!-- "amus" will force reinstall all files.
See https://docs.microsoft.com/en-us/windows/desktop/Msi/reinstallmode -->
<CustomAction Id="set_reinstallmode_property"
Property="REINSTALLMODE"
Value="amus" />
<InstallExecuteSequence>
<!-- Set REINSTALL=all and REINSTALLMODE=amus if the user reruns the
MSI, which will force reinstalling all files and services. -->
<Custom Action="set_maintenance" Before="set_reinstall_all_property">
Installed AND (NOT REMOVE) AND (NOT UPGRADINGPRODUCTCODE)
</Custom>
<Custom Action="set_reinstall_all_property"
Before="set_reinstallmode_property">
MAINTENANCE
</Custom>
<Custom Action="set_reinstallmode_property" Before="LaunchConditions">
MAINTENANCE
</Custom>
<Custom Action="query_auto_start_service" Before="InstallInitialize"/>
<Custom Action="start_chromoting_service" After="StartServices">
<![CDATA[NOT REMOVE AND (auto_start_service = "#2")]]>
</Custom>
<!-- Set the service name and description -->
<Custom Action="set_service_display_name" Before="InstallInitialize"/>
<Custom Action="set_service_description" Before="InstallInitialize"/>
<!-- Schedule RemoveExistingProducts before installing any files.
See http://msdn.microsoft.com/en-us/library/aa371197.aspx. -->
<RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>
</Product>
</Wix>