| 1 | <?xml version="1.0" encoding="UTF-8"?> |
| 2 | <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> |
| 3 | <?if $(var.Arch) = "64"?> |
| 4 | <?define ArchLib=libgcc_s_seh-1.dll?> |
| 5 | <?define GaProgramFilesFolder="ProgramFiles64Folder" ?> |
| 6 | <?else?> |
| 7 | <?if $(var.Arch) = "32"?> |
| 8 | <?define ArchLib=libgcc_s_dw2-1.dll?> |
| 9 | <?define GaProgramFilesFolder="ProgramFilesFolder" ?> |
| 10 | <?else?> |
| 11 | <?error Unexpected Arch value $(var.Arch)?> |
| 12 | <?endif?> |
| 13 | <?endif?> |
| 14 | |
| 15 | <Product |
| 16 | Name="QEMU guest agent" |
| 17 | Id="*" |
| 18 | UpgradeCode="{EB6B8302-C06E-4BEC-ADAC-932C68A3A98D}" |
| 19 | Manufacturer="$(var.QEMU_GA_MANUFACTURER)" |
| 20 | Version="$(var.QEMU_GA_VERSION)" |
| 21 | Language="1033"> |
| 22 | <?if $(var.Arch) = 32 ?> |
| 23 | <Condition Message="Error: 32-bit version of Qemu GA can not be installed on 64-bit Windows.">NOT VersionNT64</Condition> |
| 24 | <?endif?> |
| 25 | <Package |
| 26 | Manufacturer="$(var.QEMU_GA_MANUFACTURER)" |
| 27 | InstallerVersion="200" |
| 28 | Languages="1033" |
| 29 | Compressed="yes" |
| 30 | InstallScope="perMachine" |
| 31 | /> |
| 32 | <Media Id="1" Cabinet="qemu_ga.$(var.QEMU_GA_VERSION).cab" EmbedCab="yes" /> |
| 33 | <Property Id="WHSLogo">1</Property> |
| 34 | <Property Id="ARPNOMODIFY" Value="yes" Secure="yes" /> |
| 35 | <MajorUpgrade |
| 36 | DowngradeErrorMessage="Error: A newer version of QEMU guest agent is already installed." |
| 37 | /> |
| 38 | |
| 39 | <Directory Id="TARGETDIR" Name="SourceDir"> |
| 40 | <Directory Id="$(var.GaProgramFilesFolder)" Name="QEMU Guest Agent"> |
| 41 | <Directory Id="qemu_ga_directory" Name="Qemu-ga"> |
| 42 | <Component Id="qemu_ga" Guid="{908B7199-DE2A-4DC6-A8D0-27A5AE444FEA}"> |
| 43 | <File Id="qemu_ga.exe" Name="qemu-ga.exe" Source="$(var.BUILD_DIR)/qga/qemu-ga.exe" KeyPath="yes" DiskId="1"/> |
| 44 | <ServiceInstall |
| 45 | Id="ServiceInstaller" |
| 46 | Type="ownProcess" |
| 47 | Vital="yes" |
| 48 | Name="QEMU-GA" |
| 49 | DisplayName="QEMU Guest Agent" |
| 50 | Description="QEMU Guest Agent" |
| 51 | Start="auto" |
| 52 | Account="LocalSystem" |
| 53 | ErrorControl="ignore" |
| 54 | Interactive="no" |
| 55 | Arguments="-d --retry-path" |
| 56 | > |
| 57 | </ServiceInstall> |
| 58 | <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="QEMU-GA" Wait="yes" /> |
| 59 | </Component> |
| 60 | <?ifdef var.InstallVss?> |
| 61 | <Component Id="libstdc++_6_lib" Guid="{55E737B5-9127-4A11-9FC3-A29367714574}"> |
| 62 | <File Id="libstdc++-6.lib" Name="libstdc++-6.dll" Source="$(var.BIN_DIR)/libstdc++-6.dll" KeyPath="yes" DiskId="1"/> |
| 63 | </Component> |
| 64 | <Component Id="qga_vss_dll" Guid="{CB19C453-FABB-4BB1-ABAB-6B74F687BFBB}"> |
| 65 | <File Id="qga_vss.dll" Name="qga-vss.dll" Source="$(var.BUILD_DIR)/qga/vss-win32/qga-vss.dll" KeyPath="yes" DiskId="1"/> |
| 66 | </Component> |
| 67 | <Component Id="qga_vss_tlb" Guid="{D8D584B1-59C2-4FB7-A91F-636FF7BFA66E}"> |
| 68 | <File Id="qga_vss.tlb" Name="qga-vss.tlb" Source="$(var.BUILD_DIR)/qga/vss-win32/qga-vss.tlb" KeyPath="yes" DiskId="1"/> |
| 69 | </Component> |
| 70 | <?endif?> |
| 71 | <?if $(var.Arch) = "32"?> |
| 72 | <Component Id="gspawn-helper-console" Guid="{446185B3-87BE-43D2-96B8-0FEFD9E8696D}"> |
| 73 | <File Id="gspawn-win32-helper-console.exe" Name="gspawn-win32-helper-console.exe" Source="$(var.BIN_DIR)/gspawn-win32-helper-console.exe" KeyPath="yes" DiskId="1"/> |
| 74 | </Component> |
| 75 | <Component Id="gspawn-helper" Guid="{CD67A5A3-2DB1-4DA1-A67A-8D71E797B466}"> |
| 76 | <File Id="gspawn-win32-helper.exe" Name="gspawn-win32-helper.exe" Source="$(var.BIN_DIR)/gspawn-win32-helper-console.exe" KeyPath="yes" DiskId="1"/> |
| 77 | </Component> |
| 78 | <?endif?> |
| 79 | <?if $(var.Arch) = "64"?> |
| 80 | <Component Id="gspawn-helper-console" Guid="{9E615A9F-349A-4992-A5C2-C10BAD173660}"> |
| 81 | <File Id="gspawn-win64-helper-console.exe" Name="gspawn-win64-helper-console.exe" Source="$(var.BIN_DIR)/gspawn-win64-helper-console.exe" KeyPath="yes" DiskId="1"/> |
| 82 | </Component> |
| 83 | <Component Id="gspawn-helper" Guid="{D201AD22-1846-4E4F-B6E1-C7A908ED2457}"> |
| 84 | <File Id="gspawn-win64-helper.exe" Name="gspawn-win64-helper.exe" Source="$(var.BIN_DIR)/gspawn-win64-helper-console.exe" KeyPath="yes" DiskId="1"/> |
| 85 | </Component> |
| 86 | <?endif?> |
| 87 | <Component Id="iconv" Guid="{35EE3558-D34B-4F0A-B8BD-430FF0775246}"> |
| 88 | <File Id="iconv.dll" Name="iconv.dll" Source="$(var.BIN_DIR)/iconv.dll" KeyPath="yes" DiskId="1"/> |
| 89 | </Component> |
| 90 | <Component Id="libgcc_arch_lib" Guid="{ADD4D07D-4515-4AB6-AF3E-C904961B4BB0}"> |
| 91 | <File Id="libgcc_arch_lib" Name="$(var.ArchLib)" Source="$(var.BIN_DIR)/$(var.ArchLib)" KeyPath="yes" DiskId="1"/> |
| 92 | </Component> |
| 93 | <Component Id="libglib" Guid="{D31BFD83-2773-4B65-B45A-E0D2ADA58679}"> |
| 94 | <File Id="libglib_2.0_0.dll" Name="libglib-2.0-0.dll" Source="$(var.BIN_DIR)/libglib-2.0-0.dll" KeyPath="yes" DiskId="1"/> |
| 95 | </Component> |
| 96 | <Component Id="libintl" Guid="{A641BC2D-A907-4A94-9149-F30ED430878F}"> |
| 97 | <File Id="libintl_8.dll" Name="libintl-8.dll" Source="$(var.BIN_DIR)/libintl-8.dll" KeyPath="yes" DiskId="1"/> |
| 98 | </Component> |
| 99 | <Component Id="libssp" Guid="{7880087B-02B4-4EF6-A5D3-D18F8E3D90E1}"> |
| 100 | <File Id="libssp_0.dll" Name="libssp-0.dll" Source="$(var.BIN_DIR)/libssp-0.dll" KeyPath="yes" DiskId="1"/> |
| 101 | </Component> |
| 102 | <Component Id="libwinpthread" Guid="{6C117C78-0F47-4B07-8F34-6BEE11643829}"> |
| 103 | <File Id="libwinpthread_1.dll" Name="libwinpthread-1.dll" Source="$(var.BIN_DIR)/libwinpthread-1.dll" KeyPath="yes" DiskId="1"/> |
| 104 | </Component> |
| 105 | <?if $(var.LIBPCRE) = "libpcre1"?> |
| 106 | <Component Id="libpcre" Guid="{7A86B45E-A009-489A-A849-CE3BACF03CD0}"> |
| 107 | <File Id="libpcre_1.dll" Name="libpcre-1.dll" Source="$(var.BIN_DIR)/libpcre-1.dll" KeyPath="yes" DiskId="1"/> |
| 108 | </Component> |
| 109 | <?else?> |
| 110 | <Component Id="libpcre" Guid="{F92A3804-B59C-419D-8F29-99A30352C156}"> |
| 111 | <File Id="libpcre2_8_0.dll" Name="libpcre2-8-0.dll" Source="$(var.BIN_DIR)/libpcre2-8-0.dll" KeyPath="yes" DiskId="1"/> |
| 112 | </Component> |
| 113 | <?endif?> |
| 114 | <Component Id="registry_entries" Guid="{D075D109-51CA-11E3-9F8B-000C29858960}"> |
| 115 | <RegistryKey Root="HKLM" |
| 116 | Key="Software\$(var.QEMU_GA_MANUFACTURER)\$(var.QEMU_GA_DISTRO)\Tools\QemuGA"> |
| 117 | <RegistryValue Type="string" Name="ProductID" Value="fb0a0d66-c7fb-4e2e-a16b-c4a3bfe8d13b" /> |
| 118 | <RegistryValue Type="string" Name="Version" Value="$(var.QEMU_GA_VERSION)" /> |
| 119 | </RegistryKey> |
| 120 | <RegistryKey Root="HKLM" |
| 121 | Key="System\CurrentControlSet\Services\EventLog\Application\qemu-ga"> |
| 122 | <RegistryValue Type="integer" Name="TypesSupported" Value="7" /> |
| 123 | <RegistryValue Type="string" Name="EventMessageFile" Value="[qemu_ga_directory]qemu-ga.exe" /> |
| 124 | </RegistryKey> |
| 125 | <RegistryKey Root="HKLM" |
| 126 | Key="System\CurrentControlSet\Services\QEMU Guest Agent VSS Provider"> |
| 127 | <RegistryValue Type="integer" Name="VssOption" Value="1" /> |
| 128 | </RegistryKey> |
| 129 | </Component> |
| 130 | </Directory> |
| 131 | </Directory> |
| 132 | </Directory> |
| 133 | |
| 134 | <Property Id="rundll" Value="rundll32.exe"/> |
| 135 | <Property Id="REINSTALLMODE" Value="amus"/> |
| 136 | |
| 137 | <?ifdef var.InstallVss?> |
| 138 | <CustomAction Id="RegisterCom" |
| 139 | ExeCommand='"[qemu_ga_directory]qga-vss.dll",DLLCOMRegister' |
| 140 | Execute="deferred" |
| 141 | Property="rundll" |
| 142 | Impersonate="no" |
| 143 | Return="check" |
| 144 | > |
| 145 | </CustomAction> |
| 146 | <CustomAction Id="UnRegisterCom" |
| 147 | ExeCommand='"[qemu_ga_directory]qga-vss.dll",DLLCOMUnregister' |
| 148 | Execute="deferred" |
| 149 | Property="rundll" |
| 150 | Impersonate="no" |
| 151 | Return="check" |
| 152 | > |
| 153 | </CustomAction> |
| 154 | <CustomAction Id="UnRegisterCom_Rollback" |
| 155 | ExeCommand='"[qemu_ga_directory]qga-vss.dll",DLLCOMUnregister' |
| 156 | Execute="rollback" |
| 157 | Property="rundll" |
| 158 | Impersonate="no" |
| 159 | Return="check" |
| 160 | > |
| 161 | </CustomAction> |
| 162 | <?endif?> |
| 163 | |
| 164 | <Feature Id="QEMUFeature" Title="QEMU Guest Agent" Level="1"> |
| 165 | <ComponentRef Id="qemu_ga" /> |
| 166 | <?ifdef var.InstallVss?> |
| 167 | <ComponentRef Id="libstdc++_6_lib" /> |
| 168 | <ComponentRef Id="qga_vss_dll" /> |
| 169 | <ComponentRef Id="qga_vss_tlb" /> |
| 170 | <?endif?> |
| 171 | <ComponentRef Id="gspawn-helper-console" /> |
| 172 | <ComponentRef Id="gspawn-helper" /> |
| 173 | <ComponentRef Id="iconv" /> |
| 174 | <ComponentRef Id="libgcc_arch_lib" /> |
| 175 | <ComponentRef Id="libglib" /> |
| 176 | <ComponentRef Id="libintl" /> |
| 177 | <ComponentRef Id="libssp" /> |
| 178 | <ComponentRef Id="libwinpthread" /> |
| 179 | <ComponentRef Id="registry_entries" /> |
| 180 | <ComponentRef Id="libpcre" /> |
| 181 | </Feature> |
| 182 | |
| 183 | <InstallExecuteSequence> |
| 184 | <?ifdef var.InstallVss?> |
| 185 | <!-- Use explicit Sequence number to provide an absolute position in the sequence--> |
| 186 | <!-- This is needed to set "UnRegisterCom_Rollback" before "RegisterCom" and after "InstallFiles"--> |
| 187 | <!-- but, Wix detect this double condition incorrectly --> |
| 188 | |
| 189 | <!-- UnRegisterCom_Rollback (for install rollback): at 5849, right before RegisterCom (5850)--> |
| 190 | <!-- Runs only if the installation fails and rolls back--> |
| 191 | <Custom Action="UnRegisterCom_Rollback" Sequence="5849">NOT REMOVE</Custom> |
| 192 | |
| 193 | <!-- RegisterCom (for install): at 5850, right after InstallFiles (5849) (old: After="InstallServices")--> |
| 194 | <Custom Action="RegisterCom" Sequence="5850">NOT REMOVE</Custom> |
| 195 | |
| 196 | <!-- UnRegisterCom (for uninstall): at 1901, right after StopServices (1900) (old: After="StopServices")--> |
| 197 | <Custom Action="UnRegisterCom" Sequence="1901">Installed</Custom> |
| 198 | <?endif?> |
| 199 | </InstallExecuteSequence> |
| 200 | </Product> |
| 201 | </Wix> |