summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorSameeh Jubran <sjubran@redhat.com>2020-03-11 19:04:16 +0200
committerMichael Roth <mdroth@linux.vnet.ibm.com>2020-03-24 11:32:19 -0500
commitb2413df83348acf371c03bced9a3845bba883ed5 (patch)
tree63f02e97c517c65353d8e916f5ff6514768d923a
parentbb1ce44b15f159b67fafc5f4b285bbf20a1961e9 (diff)
downloadfocaccia-qemu-b2413df83348acf371c03bced9a3845bba883ed5.tar.gz
focaccia-qemu-b2413df83348acf371c03bced9a3845bba883ed5.zip
qga-win: Handle VSS_E_PROVIDER_ALREADY_REGISTERED error
This patch handles the case where VSS Provider is already registered,
where in such case qga uninstalls the provider and registers it again.

Signed-off-by: Sameeh Jubran <sjubran@redhat.com>
Signed-off-by: Basil Salman <basil@daynix.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
-rw-r--r--qga/vss-win32/install.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp
index 6713e58670..a456841360 100644
--- a/qga/vss-win32/install.cpp
+++ b/qga/vss-win32/install.cpp
@@ -443,6 +443,17 @@ 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");
     }