[PATCH] qga/installer: Remove QGA VSS if QGA installation failed

Kostiantyn Kostiuk posted 1 patch 2 months, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20250825143155.160913-1-kkostiuk@redhat.com
Maintainers: Kostiantyn Kostiuk <kkostiuk@redhat.com>, Michael Roth <michael.roth@amd.com>
qga/installer/qemu-ga.wxs | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
[PATCH] qga/installer: Remove QGA VSS if QGA installation failed
Posted by Kostiantyn Kostiuk 2 months, 3 weeks ago
When QGA Installer failed to install QGA service but install
QGA VSS provider, provider should be removed before installer
exits. Otherwise QGA VSS will has broken infomation and
prevent QGA installation in next run.

Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
---
 qga/installer/qemu-ga.wxs | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
index df572adb4a..32b8308728 100644
--- a/qga/installer/qemu-ga.wxs
+++ b/qga/installer/qemu-ga.wxs
@@ -151,6 +151,14 @@
               Return="check"
               >
     </CustomAction>
+    <CustomAction Id="UnRegisterCom_Rollback"
+              ExeCommand='"[qemu_ga_directory]qga-vss.dll",DLLCOMUnregister'
+              Execute="rollback"
+              Property="rundll"
+              Impersonate="no"
+              Return="check"
+              >
+    </CustomAction>
     <?endif?>
 
     <Feature Id="QEMUFeature" Title="QEMU Guest Agent" Level="1">
@@ -174,8 +182,19 @@
 
     <InstallExecuteSequence>
       <?ifdef var.InstallVss?>
-      <Custom Action="UnRegisterCom" After="StopServices">Installed</Custom>
-      <Custom Action="RegisterCom" After="InstallServices">NOT REMOVE</Custom>
+        <!-- Use explicit Sequence number to provide an absolute position in the sequence-->
+        <!-- This is needed to set "UnRegisterCom_Rollback" before "RegisterCom" and after "InstallFiles"-->
+        <!-- but, Wix detect this double condition incorrectly -->
+
+        <!-- UnRegisterCom_Rollback (for install rollback): at 5849, right before RegisterCom (5850)-->
+        <!-- Runs only if the installation fails and rolls back-->
+        <Custom Action="UnRegisterCom_Rollback" Sequence="5849">NOT REMOVE</Custom>
+
+        <!-- RegisterCom (for install): at 5850, right after InstallFiles (5849) (old: After="InstallServices")-->
+        <Custom Action="RegisterCom" Sequence="5850">NOT REMOVE</Custom>
+
+        <!-- UnRegisterCom (for uninstall): at 1901, right after StopServices (1900) (old: After="StopServices")-->
+        <Custom Action="UnRegisterCom" Sequence="1901">Installed</Custom>
       <?endif?>
     </InstallExecuteSequence>
   </Product>
-- 
2.50.1
Re: [PATCH] qga/installer: Remove QGA VSS if QGA installation failed
Posted by Michael Tokarev 2 months, 1 week ago
On 25.08.2025 17:31, Kostiantyn Kostiuk wrote:
> When QGA Installer failed to install QGA service but install
> QGA VSS provider, provider should be removed before installer
> exits. Otherwise QGA VSS will has broken infomation and
> prevent QGA installation in next run.

I'm picking this up for qemu-stable (10.0 & 10.1).
Please let me know if I shouldn't.

Thanks,

/mjt
Re: [PATCH] qga/installer: Remove QGA VSS if QGA installation failed
Posted by Kostiantyn Kostiuk 2 months, 1 week ago
Hi Michael,

Please also pick
https://lore.kernel.org/qemu-devel/20250825135311.138330-1-kkostiuk@redhat.com/
for stable as it provides more detailed error logs.

Best Regards,
Kostiantyn Kostiuk.


On Wed, Sep 3, 2025 at 10:09 AM Michael Tokarev <mjt@tls.msk.ru> wrote:

> On 25.08.2025 17:31, Kostiantyn Kostiuk wrote:
> > When QGA Installer failed to install QGA service but install
> > QGA VSS provider, provider should be removed before installer
> > exits. Otherwise QGA VSS will has broken infomation and
> > prevent QGA installation in next run.
>
> I'm picking this up for qemu-stable (10.0 & 10.1).
> Please let me know if I shouldn't.
>
> Thanks,
>
> /mjt
>
>
Re: [PATCH] qga/installer: Remove QGA VSS if QGA installation failed
Posted by Michael Tokarev 2 months, 1 week ago
On 03.09.2025 11:01, Kostiantyn Kostiuk wrote:
> Hi Michael,
> 
> Please also pick https://lore.kernel.org/qemu- 
> devel/20250825135311.138330-1-kkostiuk@redhat.com/ <https:// 
> lore.kernel.org/qemu-devel/20250825135311.138330-1-kkostiuk@redhat.com/> 
> for stable as it provides more detailed error logs.

Picked up edf3780a7dad4 "qga-vss: Write hex value of error in log"
too (for 10.0 & 10.1).

Thanks,

/mjt

Re: [PATCH] qga/installer: Remove QGA VSS if QGA installation failed
Posted by Yan Vugenfirer 2 months, 2 weeks ago
On Mon, Aug 25, 2025 at 5:32 PM Kostiantyn Kostiuk <kkostiuk@redhat.com> wrote:
>
> When QGA Installer failed to install QGA service but install
> QGA VSS provider, provider should be removed before installer
> exits. Otherwise QGA VSS will has broken infomation and

typos, should be:  "QGA VSS will have broken information""

> prevent QGA installation in next run.
>
> Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
> ---
>  qga/installer/qemu-ga.wxs | 23 +++++++++++++++++++++--
>  1 file changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
> index df572adb4a..32b8308728 100644
> --- a/qga/installer/qemu-ga.wxs
> +++ b/qga/installer/qemu-ga.wxs
> @@ -151,6 +151,14 @@
>                Return="check"
>                >
>      </CustomAction>
> +    <CustomAction Id="UnRegisterCom_Rollback"
> +              ExeCommand='"[qemu_ga_directory]qga-vss.dll",DLLCOMUnregister'
> +              Execute="rollback"
> +              Property="rundll"
> +              Impersonate="no"
> +              Return="check"
> +              >
> +    </CustomAction>
>      <?endif?>
>
>      <Feature Id="QEMUFeature" Title="QEMU Guest Agent" Level="1">
> @@ -174,8 +182,19 @@
>
>      <InstallExecuteSequence>
>        <?ifdef var.InstallVss?>
> -      <Custom Action="UnRegisterCom" After="StopServices">Installed</Custom>
> -      <Custom Action="RegisterCom" After="InstallServices">NOT REMOVE</Custom>
> +        <!-- Use explicit Sequence number to provide an absolute position in the sequence-->
> +        <!-- This is needed to set "UnRegisterCom_Rollback" before "RegisterCom" and after "InstallFiles"-->
> +        <!-- but, Wix detect this double condition incorrectly -->
> +
> +        <!-- UnRegisterCom_Rollback (for install rollback): at 5849, right before RegisterCom (5850)-->
> +        <!-- Runs only if the installation fails and rolls back-->
> +        <Custom Action="UnRegisterCom_Rollback" Sequence="5849">NOT REMOVE</Custom>
> +
> +        <!-- RegisterCom (for install): at 5850, right after InstallFiles (5849) (old: After="InstallServices")-->
> +        <Custom Action="RegisterCom" Sequence="5850">NOT REMOVE</Custom>
> +
> +        <!-- UnRegisterCom (for uninstall): at 1901, right after StopServices (1900) (old: After="StopServices")-->
> +        <Custom Action="UnRegisterCom" Sequence="1901">Installed</Custom>
>        <?endif?>
>      </InstallExecuteSequence>
>    </Product>
> --
> 2.50.1
>

Reviewed-by: Yan Vugenfirer <yvugenfi@redhat.com>