static NTSTATUS SilentUpdateCheckThreadStart( __in PVOID Parameter ) { if (ConnectionAvailable()) { if (QueryXmlData()) { ULONG majorVersion = 0; ULONG minorVersion = 0; // Get the current Process Hacker version PhGetPhVersionNumbers(&majorVersion, &minorVersion, NULL, NULL); // Compare the current version against the latest available version if (CompareVersions(UpdateData.MajorVersion, UpdateData.MinorVersion, majorVersion, minorVersion) > 0) { // Don't spam the user the second they open PH, delay dialog creation for 3 seconds. Sleep(3 * 1000); // Show the dialog asynchronously on a new thread. ShowUpdateDialog(); } } FreeXmlData(); } return STATUS_SUCCESS; }
static PPH_STRING UpdateVersionString( VOID ) { ULONG majorVersion; ULONG minorVersion; ULONG revisionVersion; PPH_STRING currentVersion = NULL; PPH_STRING versionHeader = NULL; PhGetPhVersionNumbers( &majorVersion, &minorVersion, NULL, &revisionVersion ); currentVersion = PhFormatString( L"%lu.%lu.%lu", majorVersion, minorVersion, revisionVersion ); if (currentVersion) { versionHeader = PhConcatStrings2(L"ProcessHacker-Build: ", currentVersion->Buffer); PhDereferenceObject(currentVersion); } return versionHeader; }
static NTSTATUS CheckUpdateThreadStart( __in PVOID Parameter ) { HWND hwndDlg = (HWND)Parameter; if (ConnectionAvailable()) { if (QueryXmlData()) { INT result = 0; PhGetPhVersionNumbers( &UpdateData.PhMajorVersion, &UpdateData.PhMinorVersion, NULL, &UpdateData.PhRevisionVersion ); result = 1;/*CompareVersions( UpdateData.MajorVersion, UpdateData.MinorVersion, UpdateData.PhMajorVersion, UpdateData.PhMinorVersion );*/ if (result > 0) { PPH_STRING summaryText = PhFormatString( L"Process Hacker %u.%u", UpdateData.MajorVersion, UpdateData.MinorVersion ); PPH_STRING releaseDateText = PhFormatString( L"Released: %s", UpdateData.RelDate->Buffer ); PPH_STRING releaseSizeText = PhFormatString( L"Size: %s", UpdateData.Size->Buffer ); SetDlgItemText(hwndDlg, IDC_MESSAGE, summaryText->Buffer); SetDlgItemText(hwndDlg, IDC_RELDATE, releaseDateText->Buffer); SetDlgItemText(hwndDlg, IDC_STATUS, releaseSizeText->Buffer); // Set the state for the button to know it can preform the download action. PhUpdaterState = Download; // Enable the download button. Button_Enable(GetDlgItem(hwndDlg, IDC_DOWNLOAD), TRUE); // Use the Scrollbar macro to enable the other controls. ScrollBar_Show(GetDlgItem(hwndDlg, IDC_PROGRESS), TRUE); ScrollBar_Show(GetDlgItem(hwndDlg, IDC_RELDATE), TRUE); ScrollBar_Show(GetDlgItem(hwndDlg, IDC_STATUS), TRUE); PhDereferenceObject(releaseSizeText); PhDereferenceObject(releaseDateText); PhDereferenceObject(summaryText); } else if (result == 0) { PPH_STRING summaryText = PhCreateString( L"No updates available" ); PPH_STRING versionText = PhFormatString( L"You're running the latest stable version: v%u.%u", UpdateData.MajorVersion, UpdateData.MinorVersion ); SetDlgItemText(hwndDlg, IDC_MESSAGE, summaryText->Buffer); SetDlgItemText(hwndDlg, IDC_RELDATE, versionText->Buffer); PhDereferenceObject(versionText); PhDereferenceObject(summaryText); } else if (result < 0) { PPH_STRING summaryText = PhCreateString( L"No updates available" ); PPH_STRING versionText = PhFormatString( L"You're running SVN build: v%u.%u (r%u)", UpdateData.PhMajorVersion, UpdateData.PhMinorVersion, UpdateData.PhRevisionVersion ); //swprintf_s( // szReleaseText, // _countof(szReleaseText), // L"Released: %s", // xmlData.RelDate // ); SetDlgItemText(hwndDlg, IDC_RELDATE, versionText->Buffer); SetDlgItemText(hwndDlg, IDC_MESSAGE, summaryText->Buffer); PhDereferenceObject(versionText); PhDereferenceObject(summaryText); } } } return STATUS_SUCCESS; }