From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50970) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eHTEa-00060K-B3 for qemu-devel@nongnu.org; Wed, 22 Nov 2017 06:30:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eHTEV-00025r-Ln for qemu-devel@nongnu.org; Wed, 22 Nov 2017 06:30:28 -0500 Received: from mail-wr0-x243.google.com ([2a00:1450:400c:c0c::243]:41487) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eHTEV-00025G-E3 for qemu-devel@nongnu.org; Wed, 22 Nov 2017 06:30:23 -0500 Received: by mail-wr0-x243.google.com with SMTP id z14so14206335wrb.8 for ; Wed, 22 Nov 2017 03:30:22 -0800 (PST) From: Sameeh Jubran Date: Wed, 22 Nov 2017 13:30:14 +0200 Message-Id: <20171122113014.2512-1-sameeh@daynix.com> Subject: [Qemu-devel] [PATCH] qga-win: VSS: Handle VSS_E_PROVIDER_ALREADY_REGISTERED error List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, mdroth@linux.vnet.ibm.com Cc: Yan Vugenfirer From: Sameeh Jubran 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 --- qga/vss-win32/install.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) 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(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"); } -- 2.13.6