It's nicer from a management perspective that the agent can survive hotplug/unplug of the channel device, or be started prior to the installation of the channel device's driver without and still be able to resume normal function afterward. On linux there are alternatives like systemd to support this, but on w32 --retry-path is the only option so it makes sense to set it by default when installed as a w32 service. Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
190 lines
8.3 KiB
XML
190 lines
8.3 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
|
<?ifndef env.QEMU_GA_VERSION ?>
|
|
<?error Environment variable QEMU_GA_VERSION undefined?>
|
|
<?endif?>
|
|
|
|
<?ifndef env.QEMU_GA_DISTRO ?>
|
|
<?error Environment variable QEMU_GA_DISTRO undefined?>
|
|
<?endif?>
|
|
|
|
<?ifndef env.QEMU_GA_MANUFACTURER ?>
|
|
<?error Environment variable QEMU_GA_MANUFACTURER undefined?>
|
|
<?endif?>
|
|
|
|
<?ifndef var.Arch?>
|
|
<?error Define Arch to 32 or 64?>
|
|
<?endif?>
|
|
|
|
<?ifndef var.Mingw_bin?>
|
|
<?if $(var.Arch) = "64"?>
|
|
<?define Mingw_bin=/usr/x86_64-w64-mingw32/sys-root/mingw/bin ?>
|
|
<?endif?>
|
|
<?if $(var.Arch) = "32"?>
|
|
<?define Mingw_bin=/usr/i686-w64-mingw32/sys-root/mingw/bin ?>
|
|
<?endif?>
|
|
<?endif?>
|
|
|
|
<?if $(var.Arch) = "64"?>
|
|
<?define ArchLib=libgcc_s_seh-1.dll?>
|
|
<?define GaProgramFilesFolder="ProgramFiles64Folder" ?>
|
|
<?endif?>
|
|
|
|
<?if $(var.Arch) = "32"?>
|
|
<?define ArchLib=libgcc_s_sjlj-1.dll?>
|
|
<?define GaProgramFilesFolder="ProgramFilesFolder" ?>
|
|
<?endif?>
|
|
|
|
<?ifndef var.ArchLib ?>
|
|
<?error Unexpected Arch value $(var.Arch)?>
|
|
<?endif?>
|
|
|
|
<Product
|
|
Name="QEMU guest agent"
|
|
Id="*"
|
|
UpgradeCode="{EB6B8302-C06E-4BEC-ADAC-932C68A3A98D}"
|
|
Manufacturer="$(env.QEMU_GA_MANUFACTURER)"
|
|
Version="$(env.QEMU_GA_VERSION)"
|
|
Language="1033">
|
|
<?if $(var.Arch) = 32 ?>
|
|
<Condition Message="Error: 32-bit version of Qemu GA can not be installed on 64-bit Windows.">NOT VersionNT64</Condition>
|
|
<?endif?>
|
|
<Package
|
|
Manufacturer="$(env.QEMU_GA_MANUFACTURER)"
|
|
InstallerVersion="200"
|
|
Languages="1033"
|
|
Compressed="yes"
|
|
InstallScope="perMachine"
|
|
/>
|
|
<Media Id="1" Cabinet="qemu_ga.$(env.QEMU_GA_VERSION).cab" EmbedCab="yes" />
|
|
<Property Id="WHSLogo">1</Property>
|
|
<MajorUpgrade
|
|
DowngradeErrorMessage="Error: A newer version of QEMU guest agent is already installed."
|
|
/>
|
|
|
|
<Directory Id="TARGETDIR" Name="SourceDir">
|
|
<Directory Id="$(var.GaProgramFilesFolder)" Name="QEMU Guest Agent">
|
|
<Directory Id="qemu_ga_directory" Name="Qemu-ga">
|
|
<Component Id="qemu_ga" Guid="{908B7199-DE2A-4DC6-A8D0-27A5AE444FEA}">
|
|
<File Id="qemu_ga.exe" Name="qemu-ga.exe" Source="$(env.BUILD_DIR)/qemu-ga.exe" KeyPath="yes" DiskId="1"/>
|
|
<ServiceInstall
|
|
Id="ServiceInstaller"
|
|
Type="ownProcess"
|
|
Vital="yes"
|
|
Name="QEMU-GA"
|
|
DisplayName="QEMU Guest Agent"
|
|
Description="QEMU Guest Agent"
|
|
Start="auto"
|
|
Account="LocalSystem"
|
|
ErrorControl="ignore"
|
|
Interactive="no"
|
|
Arguments="-d --retry-path"
|
|
>
|
|
</ServiceInstall>
|
|
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="QEMU-GA" Wait="no" />
|
|
</Component>
|
|
<?ifdef var.InstallVss?>
|
|
<Component Id="qga_vss_dll" Guid="{CB19C453-FABB-4BB1-ABAB-6B74F687BFBB}">
|
|
<File Id="qga_vss.dll" Name="qga-vss.dll" Source="$(env.BUILD_DIR)/qga/vss-win32/qga-vss.dll" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="qga_vss_tlb" Guid="{D8D584B1-59C2-4FB7-A91F-636FF7BFA66E}">
|
|
<File Id="qga_vss.tlb" Name="qga-vss.tlb" Source="$(env.BUILD_DIR)/qga/vss-win32/qga-vss.tlb" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<?endif?>
|
|
<?if $(var.Arch) = "32"?>
|
|
<Component Id="gspawn-helper-console" Guid="{446185B3-87BE-43D2-96B8-0FEFD9E8696D}">
|
|
<File Id="gspawn-win32-helper-console.exe" Name="gspawn-win32-helper-console.exe" Source="$(var.Mingw_bin)/gspawn-win32-helper-console.exe" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="gspawn-helper" Guid="{CD67A5A3-2DB1-4DA1-A67A-8D71E797B466}">
|
|
<File Id="gspawn-win32-helper.exe" Name="gspawn-win32-helper.exe" Source="$(var.Mingw_bin)/gspawn-win32-helper-console.exe" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<?endif?>
|
|
<?if $(var.Arch) = "64"?>
|
|
<Component Id="gspawn-helper-console" Guid="{9E615A9F-349A-4992-A5C2-C10BAD173660}">
|
|
<File Id="gspawn-win64-helper-console.exe" Name="gspawn-win64-helper-console.exe" Source="$(var.Mingw_bin)/gspawn-win64-helper-console.exe" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="gspawn-helper" Guid="{D201AD22-1846-4E4F-B6E1-C7A908ED2457}">
|
|
<File Id="gspawn-win64-helper.exe" Name="gspawn-win64-helper.exe" Source="$(var.Mingw_bin)/gspawn-win64-helper-console.exe" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<?endif?>
|
|
<Component Id="iconv" Guid="{35EE3558-D34B-4F0A-B8BD-430FF0775246}">
|
|
<File Id="iconv.dll" Name="iconv.dll" Source="$(var.Mingw_bin)/iconv.dll" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="libgcc_arch_lib" Guid="{ADD4D07D-4515-4AB6-AF3E-C904961B4BB0}">
|
|
<File Id="libgcc_arch_lib" Name="$(var.ArchLib)" Source="$(var.Mingw_bin)/$(var.ArchLib)" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="libglib" Guid="{D31BFD83-2773-4B65-B45A-E0D2ADA58679}">
|
|
<File Id="libglib_2.0_0.dll" Name="libglib-2.0-0.dll" Source="$(var.Mingw_bin)/libglib-2.0-0.dll" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="libintl" Guid="{A641BC2D-A907-4A94-9149-F30ED430878F}">
|
|
<File Id="libintl_8.dll" Name="libintl-8.dll" Source="$(var.Mingw_bin)/libintl-8.dll" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="libssp" Guid="{7880087B-02B4-4EF6-A5D3-D18F8E3D90E1}">
|
|
<File Id="libssp_0.dll" Name="libssp-0.dll" Source="$(var.Mingw_bin)/libssp-0.dll" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="libwinpthread" Guid="{6C117C78-0F47-4B07-8F34-6BEE11643829}">
|
|
<File Id="libwinpthread_1.dll" Name="libwinpthread-1.dll" Source="$(var.Mingw_bin)/libwinpthread-1.dll" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="libpcre" Guid="{7A86B45E-A009-489A-A849-CE3BACF03CD0}">
|
|
<File Id="libpcre_1.dll" Name="libpcre-1.dll" Source="$(var.Mingw_bin)/libpcre-1.dll" KeyPath="yes" DiskId="1"/>
|
|
</Component>
|
|
<Component Id="registry_entries" Guid="{D075D109-51CA-11E3-9F8B-000C29858960}">
|
|
<RegistryKey Root="HKLM"
|
|
Key="Software\$(env.QEMU_GA_MANUFACTURER)\$(env.QEMU_GA_DISTRO)\Tools\QemuGA">
|
|
<RegistryValue Type="string" Name="ProductID" Value="fb0a0d66-c7fb-4e2e-a16b-c4a3bfe8d13b" />
|
|
<RegistryValue Type="string" Name="Version" Value="$(env.QEMU_GA_VERSION)" />
|
|
</RegistryKey>
|
|
</Component>
|
|
</Directory>
|
|
</Directory>
|
|
</Directory>
|
|
|
|
<Property Id="cmd" Value="cmd.exe"/>
|
|
<Property Id="REINSTALLMODE" Value="amus"/>
|
|
|
|
<?ifdef var.InstallVss?>
|
|
<CustomAction Id="RegisterCom"
|
|
ExeCommand='/c "[qemu_ga_directory]qemu-ga.exe" -s vss-install'
|
|
Execute="deferred"
|
|
Property="cmd"
|
|
Impersonate="no"
|
|
Return="check"
|
|
>
|
|
</CustomAction>
|
|
<CustomAction Id="UnRegisterCom"
|
|
ExeCommand='/c "[qemu_ga_directory]qemu-ga.exe" -s vss-uninstall'
|
|
Execute="deferred"
|
|
Property="cmd"
|
|
Impersonate="no"
|
|
Return="check"
|
|
>
|
|
</CustomAction>
|
|
<?endif?>
|
|
|
|
<Feature Id="QEMUFeature" Title="QEMU Guest Agent" Level="1">
|
|
<ComponentRef Id="qemu_ga" />
|
|
<?ifdef var.InstallVss?>
|
|
<ComponentRef Id="qga_vss_dll" />
|
|
<ComponentRef Id="qga_vss_tlb" />
|
|
<?endif?>
|
|
<ComponentRef Id="gspawn-helper-console" />
|
|
<ComponentRef Id="gspawn-helper" />
|
|
<ComponentRef Id="iconv" />
|
|
<ComponentRef Id="libgcc_arch_lib" />
|
|
<ComponentRef Id="libglib" />
|
|
<ComponentRef Id="libintl" />
|
|
<ComponentRef Id="libssp" />
|
|
<ComponentRef Id="libwinpthread" />
|
|
<ComponentRef Id="registry_entries" />
|
|
<ComponentRef Id="libpcre" />
|
|
</Feature>
|
|
|
|
<InstallExecuteSequence>
|
|
<?ifdef var.InstallVss?>
|
|
<Custom Action="UnRegisterCom" After="StopServices">Installed</Custom>
|
|
<Custom Action="RegisterCom" After="InstallServices">NOT REMOVE</Custom>
|
|
<?endif?>
|
|
</InstallExecuteSequence>
|
|
</Product>
|
|
</Wix>
|