This commit improves the QGA VSS provider installation flow by attempting to unregister the VSS provider if it's already found during installation. This allows for a retry of installation even if a previous unregistration failed or was not performed.
Signed-off-by: Elizabeth Ashurov <eashu...@redhat.com> --- qga/vss-win32/install.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp index 5cea5bcf74..a136d46050 100644 --- a/qga/vss-win32/install.cpp +++ b/qga/vss-win32/install.cpp @@ -263,6 +263,7 @@ STDAPI COMRegister(void) qga_debug_begin; HRESULT hr; + HRESULT unregisterHr; COMInitializer initializer; COMPointer<IUnknown> pUnknown; COMPointer<ICOMAdminCatalog2> pCatalog; @@ -287,9 +288,13 @@ STDAPI COMRegister(void) chk(QGAProviderFind(QGAProviderCount, (void *)&count)); if (count) { - errmsg(E_ABORT, "QGA VSS Provider is already installed"); - qga_debug_end; - return E_ABORT; + qga_debug("QGA VSS Provider is already installed. Attempting to unregister first."); + unregisterHr = COMUnregister(); + if (FAILED(unregisterHr)) { + errmsg(unregisterHr, "Failed to unregister existing QGA VSS Provider. Aborting installation."); + qga_debug_end; + return E_ABORT; + } } chk(CoCreateInstance(CLSID_COMAdminCatalog, NULL, CLSCTX_INPROC_SERVER, -- 2.49.0