diff options
| -rw-r--r-- | MAINTAINERS | 4 | ||||
| -rw-r--r-- | qga/vss-win32/install.cpp | 15 |
2 files changed, 13 insertions, 6 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index b3b2a11207..7128e0bc98 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3385,7 +3385,7 @@ T: git https://repo.or.cz/qemu/armbru.git qapi-next QEMU Guest Agent M: Michael Roth <michael.roth@amd.com> -M: Konstantin Kostiuk <kkostiuk@redhat.com> +M: Kostiantyn Kostiuk <kkostiuk@redhat.com> S: Maintained F: qga/ F: contrib/systemd/qemu-guest-agent.service @@ -3396,7 +3396,7 @@ F: tests/*/test-qga* T: git https://github.com/mdroth/qemu.git qga QEMU Guest Agent Win32 -M: Konstantin Kostiuk <kkostiuk@redhat.com> +M: Kostiantyn Kostiuk <kkostiuk@redhat.com> S: Maintained F: qga/*win32* F: qga/vss-win32/ diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp index 5cea5bcf74..7b25d9098b 100644 --- a/qga/vss-win32/install.cpp +++ b/qga/vss-win32/install.cpp @@ -287,9 +287,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."); + hr = COMUnregister(); + if (FAILED(hr)) { + errmsg(hr, "Failed to unregister existing QGA VSS Provider. Aborting installation."); + qga_debug_end; + return E_ABORT; + } } chk(CoCreateInstance(CLSID_COMAdminCatalog, NULL, CLSCTX_INPROC_SERVER, @@ -385,7 +389,10 @@ out: STDAPI_(void) CALLBACK DLLCOMRegister(HWND, HINSTANCE, LPSTR, int); STDAPI_(void) CALLBACK DLLCOMRegister(HWND, HINSTANCE, LPSTR, int) { - COMRegister(); + HRESULT hr = COMRegister(); + if (FAILED(hr)) { + exit(hr); + } } STDAPI_(void) CALLBACK DLLCOMUnregister(HWND, HINSTANCE, LPSTR, int); |