qga/installer/qemu-ga.wxs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-)
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
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
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 > >
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
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>
© 2016 - 2025 Red Hat, Inc.