mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2025-02-21 21:00:21 +01:00
Update success notification is displayed correctly for all settings; fixed posible null dereferencing in the updater
This commit is contained in:
parent
30b36b08c2
commit
277f235810
@ -240,9 +240,44 @@ DWORD CheckForUpdatesThread(LPVOID unused)
|
||||
hEvents[1] = CreateEventW(NULL, FALSE, FALSE, L"EP_Ev_InstallUpdates_" _T(EP_CLSID));
|
||||
if (hEvents[0] && hEvents[1])
|
||||
{
|
||||
if (bShowUpdateToast)
|
||||
{
|
||||
ShowUpdateSuccessNotification(hModule, notifier, notifFactory, &toast);
|
||||
|
||||
HKEY hKey = NULL;
|
||||
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
TEXT(REGPATH),
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_READ | KEY_WOW64_64KEY | KEY_WRITE,
|
||||
NULL,
|
||||
&hKey,
|
||||
NULL
|
||||
);
|
||||
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
hKey = NULL;
|
||||
}
|
||||
if (hKey)
|
||||
{
|
||||
bShowUpdateToast = FALSE;
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT("IsUpdatePending"),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&bShowUpdateToast,
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
if (dwUpdatePolicy != UPDATE_POLICY_MANUAL)
|
||||
{
|
||||
InstallUpdatesIfAvailable(hModule, bShowUpdateToast, notifier, notifFactory, &toast, UPDATES_OP_DEFAULT, bAllocConsole, dwUpdatePolicy);
|
||||
InstallUpdatesIfAvailable(hModule, notifier, notifFactory, &toast, UPDATES_OP_DEFAULT, bAllocConsole, dwUpdatePolicy);
|
||||
}
|
||||
DWORD dwRet = 0;
|
||||
while (TRUE)
|
||||
@ -251,12 +286,12 @@ DWORD CheckForUpdatesThread(LPVOID unused)
|
||||
{
|
||||
case WAIT_OBJECT_0:
|
||||
{
|
||||
InstallUpdatesIfAvailable(hModule, bShowUpdateToast, notifier, notifFactory, &toast, UPDATES_OP_CHECK, bAllocConsole, dwUpdatePolicy);
|
||||
InstallUpdatesIfAvailable(hModule, notifier, notifFactory, &toast, UPDATES_OP_CHECK, bAllocConsole, dwUpdatePolicy);
|
||||
break;
|
||||
}
|
||||
case WAIT_OBJECT_0 + 1:
|
||||
{
|
||||
InstallUpdatesIfAvailable(hModule, bShowUpdateToast, notifier, notifFactory, &toast, UPDATES_OP_INSTALL, bAllocConsole, dwUpdatePolicy);
|
||||
InstallUpdatesIfAvailable(hModule, notifier, notifFactory, &toast, UPDATES_OP_INSTALL, bAllocConsole, dwUpdatePolicy);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -319,8 +319,11 @@ BOOL IsUpdateAvailableHelper(
|
||||
#endif
|
||||
|
||||
if (*toast)
|
||||
{
|
||||
if (notifier)
|
||||
{
|
||||
notifier->lpVtbl->Hide(notifier, *toast);
|
||||
}
|
||||
(*toast)->lpVtbl->Release((*toast));
|
||||
(*toast) = NULL;
|
||||
}
|
||||
@ -636,20 +639,13 @@ BOOL UpdateProduct(
|
||||
);
|
||||
}
|
||||
|
||||
BOOL InstallUpdatesIfAvailable(
|
||||
BOOL ShowUpdateSuccessNotification(
|
||||
HMODULE hModule,
|
||||
BOOL bIsPostUpdate,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast,
|
||||
DWORD dwOperation,
|
||||
DWORD bAllocConsole,
|
||||
DWORD dwUpdatePolicy
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast
|
||||
)
|
||||
{
|
||||
wchar_t wszInfoURL[MAX_PATH];
|
||||
ZeroMemory(wszInfoURL, MAX_PATH * sizeof(wchar_t));
|
||||
wcscat_s(wszInfoURL, MAX_PATH, _T(UPDATES_RELEASE_INFO_URL_STABLE));
|
||||
wchar_t buf[TOAST_BUFSIZ];
|
||||
DWORD dwLeftMost = 0;
|
||||
DWORD dwSecondLeft = 0;
|
||||
@ -657,8 +653,6 @@ BOOL InstallUpdatesIfAvailable(
|
||||
DWORD dwRightMost = 0;
|
||||
QueryVersionInfo(hModule, VS_VERSION_INFO, &dwLeftMost, &dwSecondLeft, &dwSecondRight, &dwRightMost);
|
||||
|
||||
if (bIsPostUpdate)
|
||||
{
|
||||
__x_ABI_CWindows_CData_CXml_CDom_CIXmlDocument* inputXml = NULL;
|
||||
const wchar_t text[] =
|
||||
L"<toast displayTimestamp=\"2021-08-29T00:00:00.000Z\" scenario=\"reminder\" "
|
||||
@ -680,13 +674,19 @@ BOOL InstallUpdatesIfAvailable(
|
||||
NULL
|
||||
);
|
||||
if (*toast)
|
||||
{
|
||||
if (notifier)
|
||||
{
|
||||
notifier->lpVtbl->Hide(notifier, *toast);
|
||||
}
|
||||
(*toast)->lpVtbl->Release((*toast));
|
||||
(*toast) = NULL;
|
||||
}
|
||||
if (notifFactory)
|
||||
{
|
||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||
if (*toast)
|
||||
}
|
||||
if ((*toast) && notifier)
|
||||
{
|
||||
notifier->lpVtbl->Show(notifier, *toast);
|
||||
}
|
||||
@ -695,41 +695,29 @@ BOOL InstallUpdatesIfAvailable(
|
||||
inputXml->lpVtbl->Release(inputXml);
|
||||
}
|
||||
|
||||
HKEY hKey = NULL;
|
||||
DWORD dwSize = 0;
|
||||
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
TEXT(REGPATH),
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_READ | KEY_WOW64_64KEY | KEY_WRITE,
|
||||
NULL,
|
||||
&hKey,
|
||||
NULL
|
||||
);
|
||||
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
hKey = NULL;
|
||||
}
|
||||
if (hKey)
|
||||
{
|
||||
dwSize = FALSE;
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT("IsUpdatePending"),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&dwSize,
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
SwitchToThread();
|
||||
}
|
||||
|
||||
BOOL InstallUpdatesIfAvailable(
|
||||
HMODULE hModule,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast,
|
||||
DWORD dwOperation,
|
||||
DWORD bAllocConsole,
|
||||
DWORD dwUpdatePolicy
|
||||
)
|
||||
{
|
||||
wchar_t wszInfoURL[MAX_PATH];
|
||||
ZeroMemory(wszInfoURL, MAX_PATH * sizeof(wchar_t));
|
||||
wcscat_s(wszInfoURL, MAX_PATH, _T(UPDATES_RELEASE_INFO_URL_STABLE));
|
||||
wchar_t buf[TOAST_BUFSIZ];
|
||||
DWORD dwLeftMost = 0;
|
||||
DWORD dwSecondLeft = 0;
|
||||
DWORD dwSecondRight = 0;
|
||||
DWORD dwRightMost = 0;
|
||||
QueryVersionInfo(hModule, VS_VERSION_INFO, &dwLeftMost, &dwSecondLeft, &dwSecondRight, &dwRightMost);
|
||||
|
||||
if (bAllocConsole)
|
||||
{
|
||||
switch (dwUpdatePolicy)
|
||||
@ -803,13 +791,19 @@ BOOL InstallUpdatesIfAvailable(
|
||||
if (dwOperation == UPDATES_OP_CHECK || dwOperation == UPDATES_OP_INSTALL)
|
||||
{
|
||||
if (*toast)
|
||||
{
|
||||
if (notifier)
|
||||
{
|
||||
notifier->lpVtbl->Hide(notifier, *toast);
|
||||
}
|
||||
(*toast)->lpVtbl->Release((*toast));
|
||||
(*toast) = NULL;
|
||||
}
|
||||
if (notifFactory)
|
||||
{
|
||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||
if ((*toast))
|
||||
}
|
||||
if ((*toast) && notifier)
|
||||
{
|
||||
notifier->lpVtbl->Show(notifier, *toast);
|
||||
}
|
||||
@ -862,13 +856,19 @@ BOOL InstallUpdatesIfAvailable(
|
||||
if (bOk || (!bOk && (dwOperation == UPDATES_OP_INSTALL)))
|
||||
{
|
||||
if (*toast)
|
||||
{
|
||||
if (notifier)
|
||||
{
|
||||
notifier->lpVtbl->Hide(notifier, *toast);
|
||||
}
|
||||
(*toast)->lpVtbl->Release((*toast));
|
||||
(*toast) = NULL;
|
||||
}
|
||||
if (notifFactory)
|
||||
{
|
||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||
if ((*toast))
|
||||
}
|
||||
if ((*toast) && notifier)
|
||||
{
|
||||
notifier->lpVtbl->Show(notifier, *toast);
|
||||
}
|
||||
@ -901,13 +901,19 @@ BOOL InstallUpdatesIfAvailable(
|
||||
NULL
|
||||
);
|
||||
if (*toast)
|
||||
{
|
||||
if (notifier)
|
||||
{
|
||||
notifier->lpVtbl->Hide(notifier, *toast);
|
||||
}
|
||||
(*toast)->lpVtbl->Release((*toast));
|
||||
(*toast) = NULL;
|
||||
}
|
||||
if (notifFactory)
|
||||
{
|
||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||
if ((*toast))
|
||||
}
|
||||
if ((*toast) && notifier)
|
||||
{
|
||||
notifier->lpVtbl->Show(notifier, *toast);
|
||||
}
|
||||
@ -963,13 +969,19 @@ BOOL InstallUpdatesIfAvailable(
|
||||
NULL
|
||||
);
|
||||
if (*toast)
|
||||
{
|
||||
if (notifier)
|
||||
{
|
||||
notifier->lpVtbl->Hide(notifier, *toast);
|
||||
}
|
||||
(*toast)->lpVtbl->Release((*toast));
|
||||
(*toast) = NULL;
|
||||
}
|
||||
if (notifFactory)
|
||||
{
|
||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||
if ((*toast))
|
||||
}
|
||||
if ((*toast) && notifier)
|
||||
{
|
||||
notifier->lpVtbl->Show(notifier, *toast);
|
||||
}
|
||||
|
@ -37,9 +37,14 @@ typedef struct IsUpdateAvailableParameters
|
||||
};
|
||||
|
||||
BOOL IsUpdatePolicy(LPCWSTR wszDataStore, DWORD dwUpdatePolicy);
|
||||
BOOL ShowUpdateSuccessNotification(
|
||||
HMODULE hModule,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast
|
||||
);
|
||||
BOOL InstallUpdatesIfAvailable(
|
||||
HMODULE hModule,
|
||||
BOOL bIsPostUpdate,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
|
||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast,
|
||||
|
Loading…
x
Reference in New Issue
Block a user