From 90980741e21d6028a21b88f3689639c49cf995fb Mon Sep 17 00:00:00 2001 From: Andy Vandijck Date: Sat, 28 Jun 2025 21:12:32 +0200 Subject: [PATCH] Fix winsparkle Fix winsparkle --- src/wx/autoupdater/wxmsw/winsparkle-wrapper.cpp | 17 +++++++++-------- src/wx/autoupdater/wxmsw/winsparkle-wrapper.h | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/wx/autoupdater/wxmsw/winsparkle-wrapper.cpp b/src/wx/autoupdater/wxmsw/winsparkle-wrapper.cpp index 58af07c0..66207e3e 100644 --- a/src/wx/autoupdater/wxmsw/winsparkle-wrapper.cpp +++ b/src/wx/autoupdater/wxmsw/winsparkle-wrapper.cpp @@ -40,22 +40,23 @@ WinSparkleDllWrapper::WinSparkleDllWrapper() temp_file.Write((void *)res_data, res_size); temp_file.Close(); - winsparkle_dll = LoadLibraryW(temp_file_name.wc_str()); + winsparkle_dll = new wxDynamicLibrary(temp_file_name, wxDL_NOW | wxDL_VERBATIM); if (winsparkle_dll != nullptr) { - winsparkle_init = reinterpret_cast(GetProcAddress(winsparkle_dll, "win_sparkle_init")); - winsparkle_check_update_with_ui = reinterpret_cast(GetProcAddress(winsparkle_dll, "win_sparkle_check_update_with_ui")); - winsparkle_set_appcast_url = reinterpret_cast(GetProcAddress(winsparkle_dll, "win_sparkle_set_appcast_url")); - winsparkle_set_app_details = reinterpret_cast(GetProcAddress(winsparkle_dll, "win_sparkle_set_app_details")); - winsparkle_cleanup = reinterpret_cast(GetProcAddress(winsparkle_dll, "win_sparkle_cleanup")); + winsparkle_init = reinterpret_cast(winsparkle_dll->GetSymbol("win_sparkle_init")); + winsparkle_check_update_with_ui = reinterpret_cast(winsparkle_dll->GetSymbol("win_sparkle_check_update_with_ui")); + winsparkle_set_appcast_url = reinterpret_cast(winsparkle_dll->GetSymbol("win_sparkle_set_appcast_url")); + winsparkle_set_app_details = reinterpret_cast(winsparkle_dll->GetSymbol("win_sparkle_set_app_details")); + winsparkle_cleanup = reinterpret_cast(winsparkle_dll->GetSymbol("win_sparkle_cleanup")); } } WinSparkleDllWrapper::~WinSparkleDllWrapper() { - if (winsparkle_dll != nullptr) { - while(::FreeLibrary(winsparkle_dll)) { + HMODULE hmod = winsparkle_dll->Detach(); + if (hmod != nullptr) { + while(::FreeLibrary(hmod)) { wxMilliSleep(50); } } diff --git a/src/wx/autoupdater/wxmsw/winsparkle-wrapper.h b/src/wx/autoupdater/wxmsw/winsparkle-wrapper.h index 39021538..65791bd6 100644 --- a/src/wx/autoupdater/wxmsw/winsparkle-wrapper.h +++ b/src/wx/autoupdater/wxmsw/winsparkle-wrapper.h @@ -20,7 +20,7 @@ private: WinSparkleDllWrapper(); ~WinSparkleDllWrapper(); - HMODULE winsparkle_dll; + wxDynamicLibrary *winsparkle_dll; func_win_sparkle_init winsparkle_init = nullptr; func_win_sparkle_check_update_with_ui winsparkle_check_update_with_ui = nullptr;