diff mbox

qga-win: VSS: Handle VSS_E_PROVIDER_ALREADY_REGISTERED error

Message ID 20171122113014.2512-1-sameeh@daynix.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sameeh Jubran Nov. 22, 2017, 11:30 a.m. UTC
From: Sameeh Jubran <sjubran@redhat.com>

We can get VSS_E_PROVIDER_ALREADY_REGISTERED error if for some
reason the uninstall of qemu-ga didn't complete successfully.
In this case we can try to unregister the component service
and attempt to register it again.

Signed-off-by: Sameeh Jubran <sjubran@redhat.com>
---
 qga/vss-win32/install.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)
diff mbox

Patch

diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp
index 51838eeb26..e7bc5e1d9d 100644
--- a/qga/vss-win32/install.cpp
+++ b/qga/vss-win32/install.cpp
@@ -443,6 +443,15 @@  STDAPI DllRegisterServer(void)
                                      VSS_PROV_SOFTWARE,
                                      const_cast<WCHAR*>(QGA_PROVIDER_VERSION),
                                      g_gProviderVersion);
+    if (hr == (long int) VSS_E_PROVIDER_ALREADY_REGISTERED) {
+        DllUnregisterServer();
+        hr = pVssAdmin->RegisterProvider(g_gProviderId, CLSID_QGAVSSProvider,
+                                     const_cast<WCHAR * >(QGA_PROVIDER_LNAME),
+                                     VSS_PROV_SOFTWARE,
+                                     const_cast<WCHAR * >(QGA_PROVIDER_VERSION),
+                                     g_gProviderVersion);
+    }
+
     if (FAILED(hr)) {
         errmsg_dialog(hr, "RegisterProvider failed");
     }