From: Sameeh Jubran Date: Wed, 11 Mar 2020 17:04:16 +0000 (+0200) Subject: qga-win: Handle VSS_E_PROVIDER_ALREADY_REGISTERED error X-Git-Tag: v4.2.1~97 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3c3e1653c5c09391c154c5f36bf8646ce2bde9f9;p=thirdparty%2Fqemu.git 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 Signed-off-by: Basil Salman Signed-off-by: Michael Roth (cherry picked from commit b2413df83348acf371c03bced9a3845bba883ed5) Signed-off-by: Michael Roth --- diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp index 6713e58670f..a4568413601 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(QGA_PROVIDER_VERSION), g_gProviderVersion); + if (hr == (long int) VSS_E_PROVIDER_ALREADY_REGISTERED) { + DllUnregisterServer(); + hr = pVssAdmin->RegisterProvider(g_gProviderId, CLSID_QGAVSSProvider, + const_cast + (QGA_PROVIDER_LNAME), + VSS_PROV_SOFTWARE, + const_cast + (QGA_PROVIDER_VERSION), + g_gProviderVersion); + } + if (FAILED(hr)) { errmsg_dialog(hr, "RegisterProvider failed"); }