Commit c3399b2868 for qemu.org
commit c3399b2868fdbda38a3f9940c803c2177dbc3007
Author: Marc-André Lureau <marcandre.lureau@redhat.com>
Date: Mon Sep 7 14:48:25 2026 +0400
qga/installer: preserve VssOption registry value across upgrades
The VssOption registry value was unconditionally written to 1 on every
install, overwriting any administrator customization. Additionally, it
was created even when VSS support was not being installed.
Move VssOption into its own component guarded by the InstallVss
preprocessor conditional. Use a RegistrySearch to read any existing
value into the VSSOPTION_VALUE property (defaulting to #1 for fresh
installs), and write it back via MSI property substitution so admin
customizations survive upgrades.
Update the registry_entries component GUID since its resource set
changed.
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/2919
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
Link: https://lore.kernel.org/qemu-devel/20260907-qga-v1-1-86456ad356e2@redhat.com
Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
index 32b8308728..5be19b211c 100644
--- a/qga/installer/qemu-ga.wxs
+++ b/qga/installer/qemu-ga.wxs
@@ -31,6 +31,15 @@
/>
<Media Id="1" Cabinet="qemu_ga.$(var.QEMU_GA_VERSION).cab" EmbedCab="yes" />
<Property Id="WHSLogo">1</Property>
+ <?ifdef var.InstallVss?>
+ <Property Id="VSSOPTION_VALUE" Value="#1">
+ <RegistrySearch Id="VssOptionSearch"
+ Root="HKLM"
+ Key="System\CurrentControlSet\Services\QEMU Guest Agent VSS Provider"
+ Name="VssOption"
+ Type="raw" />
+ </Property>
+ <?endif?>
<Property Id="ARPNOMODIFY" Value="yes" Secure="yes" />
<MajorUpgrade
DowngradeErrorMessage="Error: A newer version of QEMU guest agent is already installed."
@@ -111,7 +120,7 @@
<File Id="libpcre2_8_0.dll" Name="libpcre2-8-0.dll" Source="$(var.BIN_DIR)/libpcre2-8-0.dll" KeyPath="yes" DiskId="1"/>
</Component>
<?endif?>
- <Component Id="registry_entries" Guid="{D075D109-51CA-11E3-9F8B-000C29858960}">
+ <Component Id="registry_entries" Guid="{62A2D9E2-B22F-410C-8E41-A0D9E653B944}">
<RegistryKey Root="HKLM"
Key="Software\$(var.QEMU_GA_MANUFACTURER)\$(var.QEMU_GA_DISTRO)\Tools\QemuGA">
<RegistryValue Type="string" Name="ProductID" Value="fb0a0d66-c7fb-4e2e-a16b-c4a3bfe8d13b" />
@@ -122,11 +131,16 @@
<RegistryValue Type="integer" Name="TypesSupported" Value="7" />
<RegistryValue Type="string" Name="EventMessageFile" Value="[qemu_ga_directory]qemu-ga.exe" />
</RegistryKey>
+ </Component>
+ <?ifdef var.InstallVss?>
+ <Component Id="vss_registry_option" Guid="{75166af0-cdc9-423f-9a30-50bb59342b9b}">
<RegistryKey Root="HKLM"
Key="System\CurrentControlSet\Services\QEMU Guest Agent VSS Provider">
- <RegistryValue Type="integer" Name="VssOption" Value="1" />
+ <!-- Type="string" so MSI resolves [VSSOPTION_VALUE]; the "#N" raw format produces a REG_DWORD. -->
+ <RegistryValue Type="string" Name="VssOption" Value="[VSSOPTION_VALUE]" KeyPath="yes" />
</RegistryKey>
</Component>
+ <?endif?>
</Directory>
</Directory>
</Directory>
@@ -167,6 +181,7 @@
<ComponentRef Id="libstdc++_6_lib" />
<ComponentRef Id="qga_vss_dll" />
<ComponentRef Id="qga_vss_tlb" />
+ <ComponentRef Id="vss_registry_option" />
<?endif?>
<ComponentRef Id="gspawn-helper-console" />
<ComponentRef Id="gspawn-helper" />