mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2025-02-22 05:10:04 +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));
|
hEvents[1] = CreateEventW(NULL, FALSE, FALSE, L"EP_Ev_InstallUpdates_" _T(EP_CLSID));
|
||||||
if (hEvents[0] && hEvents[1])
|
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)
|
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;
|
DWORD dwRet = 0;
|
||||||
while (TRUE)
|
while (TRUE)
|
||||||
@ -251,12 +286,12 @@ DWORD CheckForUpdatesThread(LPVOID unused)
|
|||||||
{
|
{
|
||||||
case WAIT_OBJECT_0:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case WAIT_OBJECT_0 + 1:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -319,8 +319,11 @@ BOOL IsUpdateAvailableHelper(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (*toast)
|
if (*toast)
|
||||||
|
{
|
||||||
|
if (notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Hide(notifier, *toast);
|
notifier->lpVtbl->Hide(notifier, *toast);
|
||||||
|
}
|
||||||
(*toast)->lpVtbl->Release((*toast));
|
(*toast)->lpVtbl->Release((*toast));
|
||||||
(*toast) = NULL;
|
(*toast) = NULL;
|
||||||
}
|
}
|
||||||
@ -636,20 +639,13 @@ BOOL UpdateProduct(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL InstallUpdatesIfAvailable(
|
BOOL ShowUpdateSuccessNotification(
|
||||||
HMODULE hModule,
|
HMODULE hModule,
|
||||||
BOOL bIsPostUpdate,
|
|
||||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
|
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
|
||||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
|
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
|
||||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast,
|
__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];
|
wchar_t buf[TOAST_BUFSIZ];
|
||||||
DWORD dwLeftMost = 0;
|
DWORD dwLeftMost = 0;
|
||||||
DWORD dwSecondLeft = 0;
|
DWORD dwSecondLeft = 0;
|
||||||
@ -657,8 +653,6 @@ BOOL InstallUpdatesIfAvailable(
|
|||||||
DWORD dwRightMost = 0;
|
DWORD dwRightMost = 0;
|
||||||
QueryVersionInfo(hModule, VS_VERSION_INFO, &dwLeftMost, &dwSecondLeft, &dwSecondRight, &dwRightMost);
|
QueryVersionInfo(hModule, VS_VERSION_INFO, &dwLeftMost, &dwSecondLeft, &dwSecondRight, &dwRightMost);
|
||||||
|
|
||||||
if (bIsPostUpdate)
|
|
||||||
{
|
|
||||||
__x_ABI_CWindows_CData_CXml_CDom_CIXmlDocument* inputXml = NULL;
|
__x_ABI_CWindows_CData_CXml_CDom_CIXmlDocument* inputXml = NULL;
|
||||||
const wchar_t text[] =
|
const wchar_t text[] =
|
||||||
L"<toast displayTimestamp=\"2021-08-29T00:00:00.000Z\" scenario=\"reminder\" "
|
L"<toast displayTimestamp=\"2021-08-29T00:00:00.000Z\" scenario=\"reminder\" "
|
||||||
@ -680,13 +674,19 @@ BOOL InstallUpdatesIfAvailable(
|
|||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
if (*toast)
|
if (*toast)
|
||||||
|
{
|
||||||
|
if (notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Hide(notifier, *toast);
|
notifier->lpVtbl->Hide(notifier, *toast);
|
||||||
|
}
|
||||||
(*toast)->lpVtbl->Release((*toast));
|
(*toast)->lpVtbl->Release((*toast));
|
||||||
(*toast) = NULL;
|
(*toast) = NULL;
|
||||||
}
|
}
|
||||||
|
if (notifFactory)
|
||||||
|
{
|
||||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||||
if (*toast)
|
}
|
||||||
|
if ((*toast) && notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Show(notifier, *toast);
|
notifier->lpVtbl->Show(notifier, *toast);
|
||||||
}
|
}
|
||||||
@ -695,40 +695,28 @@ BOOL InstallUpdatesIfAvailable(
|
|||||||
inputXml->lpVtbl->Release(inputXml);
|
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();
|
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)
|
if (bAllocConsole)
|
||||||
{
|
{
|
||||||
@ -803,13 +791,19 @@ BOOL InstallUpdatesIfAvailable(
|
|||||||
if (dwOperation == UPDATES_OP_CHECK || dwOperation == UPDATES_OP_INSTALL)
|
if (dwOperation == UPDATES_OP_CHECK || dwOperation == UPDATES_OP_INSTALL)
|
||||||
{
|
{
|
||||||
if (*toast)
|
if (*toast)
|
||||||
|
{
|
||||||
|
if (notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Hide(notifier, *toast);
|
notifier->lpVtbl->Hide(notifier, *toast);
|
||||||
|
}
|
||||||
(*toast)->lpVtbl->Release((*toast));
|
(*toast)->lpVtbl->Release((*toast));
|
||||||
(*toast) = NULL;
|
(*toast) = NULL;
|
||||||
}
|
}
|
||||||
|
if (notifFactory)
|
||||||
|
{
|
||||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||||
if ((*toast))
|
}
|
||||||
|
if ((*toast) && notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Show(notifier, *toast);
|
notifier->lpVtbl->Show(notifier, *toast);
|
||||||
}
|
}
|
||||||
@ -862,13 +856,19 @@ BOOL InstallUpdatesIfAvailable(
|
|||||||
if (bOk || (!bOk && (dwOperation == UPDATES_OP_INSTALL)))
|
if (bOk || (!bOk && (dwOperation == UPDATES_OP_INSTALL)))
|
||||||
{
|
{
|
||||||
if (*toast)
|
if (*toast)
|
||||||
|
{
|
||||||
|
if (notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Hide(notifier, *toast);
|
notifier->lpVtbl->Hide(notifier, *toast);
|
||||||
|
}
|
||||||
(*toast)->lpVtbl->Release((*toast));
|
(*toast)->lpVtbl->Release((*toast));
|
||||||
(*toast) = NULL;
|
(*toast) = NULL;
|
||||||
}
|
}
|
||||||
|
if (notifFactory)
|
||||||
|
{
|
||||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||||
if ((*toast))
|
}
|
||||||
|
if ((*toast) && notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Show(notifier, *toast);
|
notifier->lpVtbl->Show(notifier, *toast);
|
||||||
}
|
}
|
||||||
@ -901,13 +901,19 @@ BOOL InstallUpdatesIfAvailable(
|
|||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
if (*toast)
|
if (*toast)
|
||||||
|
{
|
||||||
|
if (notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Hide(notifier, *toast);
|
notifier->lpVtbl->Hide(notifier, *toast);
|
||||||
|
}
|
||||||
(*toast)->lpVtbl->Release((*toast));
|
(*toast)->lpVtbl->Release((*toast));
|
||||||
(*toast) = NULL;
|
(*toast) = NULL;
|
||||||
}
|
}
|
||||||
|
if (notifFactory)
|
||||||
|
{
|
||||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||||
if ((*toast))
|
}
|
||||||
|
if ((*toast) && notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Show(notifier, *toast);
|
notifier->lpVtbl->Show(notifier, *toast);
|
||||||
}
|
}
|
||||||
@ -963,13 +969,19 @@ BOOL InstallUpdatesIfAvailable(
|
|||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
if (*toast)
|
if (*toast)
|
||||||
|
{
|
||||||
|
if (notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Hide(notifier, *toast);
|
notifier->lpVtbl->Hide(notifier, *toast);
|
||||||
|
}
|
||||||
(*toast)->lpVtbl->Release((*toast));
|
(*toast)->lpVtbl->Release((*toast));
|
||||||
(*toast) = NULL;
|
(*toast) = NULL;
|
||||||
}
|
}
|
||||||
|
if (notifFactory)
|
||||||
|
{
|
||||||
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
|
||||||
if ((*toast))
|
}
|
||||||
|
if ((*toast) && notifier)
|
||||||
{
|
{
|
||||||
notifier->lpVtbl->Show(notifier, *toast);
|
notifier->lpVtbl->Show(notifier, *toast);
|
||||||
}
|
}
|
||||||
|
@ -37,9 +37,14 @@ typedef struct IsUpdateAvailableParameters
|
|||||||
};
|
};
|
||||||
|
|
||||||
BOOL IsUpdatePolicy(LPCWSTR wszDataStore, DWORD dwUpdatePolicy);
|
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(
|
BOOL InstallUpdatesIfAvailable(
|
||||||
HMODULE hModule,
|
HMODULE hModule,
|
||||||
BOOL bIsPostUpdate,
|
|
||||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
|
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
|
||||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
|
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
|
||||||
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast,
|
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user