Skip to content

Commit

Permalink
Merge pull request #7 from Pituchey-Hotam/dev
Browse files Browse the repository at this point in the history
Add silence updates
  • Loading branch information
YehudaEi authored Oct 3, 2023
2 parents afb16e0 + d949310 commit 4d797f1
Show file tree
Hide file tree
Showing 10 changed files with 282 additions and 691 deletions.
661 changes: 0 additions & 661 deletions LICENSE.txt

This file was deleted.

Binary file modified TBBD/TBBD.rc
Binary file not shown.
3 changes: 3 additions & 0 deletions TBBD/TBBD.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@
<ItemGroup>
<Image Include="icon.ico" />
</ItemGroup>
<ItemGroup>
<Xml Include="schedule-updater.xml" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
Expand Down
5 changes: 5 additions & 0 deletions TBBD/TBBD.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,9 @@
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
<ItemGroup>
<Xml Include="schedule-updater.xml">
<Filter>Resource Files</Filter>
</Xml>
</ItemGroup>
</Project>
13 changes: 12 additions & 1 deletion TBBD/TBBD_status.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,16 @@ typedef enum tbbd_status_e {
TBBD_STATUS_REGENUMKEYEXW_ERROR,
TBBD_STATUS_REGSETVALUEEXW_ERROR,
TBBD_STATUS_STOI_INVALID_ARGUMENT,
TBBD_STATUS_STOI_OUT_OF_RANGE
TBBD_STATUS_STOI_OUT_OF_RANGE,
TBBD_STATUS_GETMODULEHANDLEW_FAILED,
TBBD_STATUS_FINDRESOURCEW_FAILED,
TBBD_STATUS_LOADRESOURCE_FAILED,
TBBD_STATUS_BAD_TEMP_PATH,
TBBD_STATUS_CREATEFILEW_FAILED,
TBBD_STATUS_WRITEFILE_FAILED,
TBBD_STATUS_ERROR_ON_WRITE_TO_THE_FILE,
TBBD_STATUS_CREATEPROCESSW_FAILED,
TBBD_STATUS_REGEX_NOT_FOUND,
TBBD_STATUS_GETMODULEFILENAMEW_FAILED,
TBBD_STATUS_COPYFILEW_FAILED
} tbbd_status_t;
31 changes: 22 additions & 9 deletions TBBD/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
tbbd_status_t status = TBBD_STATUS_UNINITIALIZED;
BOOL silence = TRUE;
WCHAR ErrorMessage[50] = { 0 };
TBBD& tbbd = TBBD::getInstance();

Expand All @@ -19,20 +20,32 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
goto l_cleanup;
}

status = tbbd.run(hInstance, nCmdShow);
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
if (strstr(lpCmdLine, "--chack-for-updates") != nullptr)
{
status = tbbd.checkForUpdates();
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
}
}
else {
silence = FALSE;
status = tbbd.run(hInstance, nCmdShow);
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
}
}

status = TBBD_STATUS_SUCCESS;
l_cleanup:
if (TBBD_STATUS_SUCCESS != status) {
if (TBBD_STATUS_WAMIN_WINHTTPSENDREQUEST_FAILED == status) {
MessageBoxW(NULL, L"תוכנת מילון הבייניש הגדול דורשת חיבור לאינטרנט כדי לפעול", L"שגיאה!", MB_OK | MB_ICONERROR | MB_RTLREADING);
}
else {
wsprintfW(ErrorMessage, L"מספר שגיאה: %d\nאנא פנה לתמיכה.", (int)status);
MessageBoxW(NULL, ErrorMessage, L"שגיאה!", MB_OK | MB_ICONERROR | MB_RTLREADING);
if (!silence) {
if (TBBD_STATUS_WAMIN_WINHTTPSENDREQUEST_FAILED == status) {
MessageBoxW(NULL, L"תוכנת מילון הבייניש הגדול דורשת חיבור לאינטרנט כדי לפעול", L"שגיאה!", MB_OK | MB_ICONERROR | MB_RTLREADING);
}
else {
wsprintfW(ErrorMessage, L"מספר שגיאה: %d\nאנא פנה לתמיכה.", (int)status);
MessageBoxW(NULL, ErrorMessage, L"שגיאה!", MB_OK | MB_ICONERROR | MB_RTLREADING);
}
}
}

Expand Down
23 changes: 9 additions & 14 deletions TBBD/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,20 @@
#define MAIN_MENU 4
#define MAINICON 7
#define IDR_MENU1 103
#define IDI_ICON1 105
#define ID_40001 40001
#define ID_40002 40002
#define ID_40003 40003
#define ID_40004 40004
#define ID_40005 40005
#define MENU_SITE_LINK 40006
#define MENU_UPDATE_LINK 40007
#define MENU_JOINUS_LINK 40008
#define MENU_EXIT 40009
#define MENU_UPDATE 40010
#define MENU_ABOUT 40011
#define MENU_SITE_LINK 40001
#define MENU_UPDATE_LINK 40002
#define MENU_JOINUS_LINK 40003
#define MENU_EXIT 40004
#define MENU_UPDATE 40005
#define MENU_ABOUT 40007
#define IDR_UPDATE_TASK_XML 104

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 106
#define _APS_NEXT_COMMAND_VALUE 40012
#define _APS_NEXT_RESOURCE_VALUE 105
#define _APS_NEXT_COMMAND_VALUE 40008
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
Expand Down
Binary file added TBBD/schedule-updater.xml
Binary file not shown.
219 changes: 219 additions & 0 deletions TBBD/tbbd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -528,6 +528,15 @@ tbbd_status_t TBBD::Install() {
goto l_cleanup;
}

status = InstallExeToAppdata();
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
}
status = InstallScheduleTask();
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
}

memcpy(this->CurrentVersion, this->ServerVersion, (size_t)((VERSION_STRING_LENGTH) / sizeof(WCHAR)) + 1);
memcpy(this->CurrentLastUpdateDate, this->ServerLastUpdateDate, (size_t)((LAST_UPDATE_DATE_STRING_LENGTH) / sizeof(WCHAR)) + 1);

Expand All @@ -540,6 +549,10 @@ tbbd_status_t TBBD::Install() {
goto l_cleanup;
}
}
else {
status = TBBD_STATUS_REGEX_NOT_FOUND;
goto l_cleanup;
}

status = TBBD_STATUS_SUCCESS;
l_cleanup:
Expand All @@ -550,6 +563,123 @@ tbbd_status_t TBBD::Install() {
return status;
}

tbbd_status_t TBBD::InstallScheduleTask() {
tbbd_status_t status = TBBD_STATUS_UNINITIALIZED;

HMODULE hModule = NULL;
HRSRC hResource = NULL;
HGLOBAL hResourceData = NULL;
PWCHAR pData = NULL;
DWORD dwSize = 0;
WCHAR tempPath[MAX_PATH] = { 0 };
DWORD tempPathLength = 0;
std::wstring outputFileFullPath = L"";
HANDLE hFile = INVALID_HANDLE_VALUE;
DWORD bytesWritten;
std::wstring command = L"schtasks.exe /create /tn \"PitucheyHotam_TBBD_Update\" /xml ";
STARTUPINFO si = { 0 };
PROCESS_INFORMATION pi = { 0 };

hModule = GetModuleHandleW(NULL);
if (NULL == hModule) {
status = TBBD_STATUS_GETMODULEHANDLEW_FAILED;
goto l_cleanup;
}

hResource = FindResourceW(hModule, MAKEINTRESOURCE(IDR_UPDATE_TASK_XML), RT_RCDATA);
if (NULL == hResource) {
status = TBBD_STATUS_FINDRESOURCEW_FAILED;
goto l_cleanup;
}

hResourceData = LoadResource(hModule, hResource);
if (NULL == hResourceData) {
status = TBBD_STATUS_LOADRESOURCE_FAILED;
goto l_cleanup;
}

pData = (PWCHAR)LockResource(hResourceData);
dwSize = SizeofResource(hModule, hResource);

tempPathLength = GetTempPathW(MAX_PATH, tempPath);
if (0 == tempPathLength || MAX_PATH < tempPathLength) {
status = TBBD_STATUS_BAD_TEMP_PATH;
goto l_cleanup;
}

outputFileFullPath = tempPath;
outputFileFullPath += L"TBBD-UpdateTaskTempFile.xml";

hFile = CreateFileW(outputFileFullPath.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile) {
status = TBBD_STATUS_CREATEFILEW_FAILED;
goto l_cleanup;
}

if (!WriteFile(hFile, (PVOID)pData, dwSize, &bytesWritten, NULL)) {
status = TBBD_STATUS_WRITEFILE_FAILED;
goto l_cleanup;
}

if (dwSize != bytesWritten) {
status = TBBD_STATUS_ERROR_ON_WRITE_TO_THE_FILE;
goto l_cleanup;
}

CloseHandle(hFile);
hFile = INVALID_HANDLE_VALUE;


command += L"\"" + outputFileFullPath + L"\"";
si.cb = sizeof(STARTUPINFO);

if (CreateProcessW(NULL, (LPWSTR)command.c_str(), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
WaitForSingleObject(pi.hProcess, INFINITE);

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else {
status = TBBD_STATUS_CREATEPROCESSW_FAILED;
goto l_cleanup;
}

status = TBBD_STATUS_SUCCESS;
l_cleanup:
if (INVALID_HANDLE_VALUE != hFile) {
CloseHandle(hFile);
}

return status;
}

tbbd_status_t TBBD::InstallExeToAppdata() {
tbbd_status_t status = TBBD_STATUS_UNINITIALIZED;
wchar_t exePath[MAX_PATH] = { 0 };
wchar_t appDataPath[MAX_PATH] = { 0 };

if (0 == GetModuleFileNameW(NULL, exePath, MAX_PATH)) {
status = TBBD_STATUS_GETMODULEFILENAMEW_FAILED;
goto l_cleanup;
}

if (SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, 0, appDataPath) != S_OK) {
status = TBBD_STATUS_SHGETFOLDERPATHW_FAILED;
goto l_cleanup;
}

wcscat_s(appDataPath, MAX_PATH, L"\\PitucheyHotam\\tbbd.exe");

if (!CopyFileW(exePath, appDataPath, FALSE)) {
status = TBBD_STATUS_COPYFILEW_FAILED;
goto l_cleanup;
}

status = TBBD_STATUS_SUCCESS;
l_cleanup:
return status;
}

tbbd_status_t TBBD::UnInstall() {
tbbd_status_t status = TBBD_STATUS_UNINITIALIZED;
HKEY hKey = NULL;
Expand Down Expand Up @@ -627,6 +757,15 @@ tbbd_status_t TBBD::UnInstall() {
}
}

status = UnInstallScheduleTask();
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
}
status = UnInstallExeFromAppdata();
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
}

status = TBBD_STATUS_SUCCESS;
l_cleanup:
if (NULL != hKey) {
Expand All @@ -636,6 +775,57 @@ tbbd_status_t TBBD::UnInstall() {
return status;
}

tbbd_status_t TBBD::UnInstallScheduleTask() {
tbbd_status_t status = TBBD_STATUS_UNINITIALIZED;
STARTUPINFO si = { 0 };
PROCESS_INFORMATION pi = { 0 };
std::wstring command = L"schtasks.exe /delete /tn \"PitucheyHotam_TBBD_Update\"";

si.cb = sizeof(STARTUPINFO);

if (CreateProcessW(NULL, (LPWSTR)command.c_str(), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
WaitForSingleObject(pi.hProcess, INFINITE);

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else {
status = TBBD_STATUS_CREATEPROCESSW_FAILED;
goto l_cleanup;
}

status = TBBD_STATUS_SUCCESS;
l_cleanup:
return status;
}

tbbd_status_t TBBD::UnInstallExeFromAppdata() {
tbbd_status_t status = TBBD_STATUS_UNINITIALIZED;
wchar_t exePath[MAX_PATH] = { 0 };
wchar_t appDataPath[MAX_PATH] = { 0 };

if (0 == GetModuleFileNameW(NULL, exePath, MAX_PATH)) {
status = TBBD_STATUS_GETMODULEFILENAMEW_FAILED;
goto l_cleanup;
}

if (SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, 0, appDataPath) != S_OK) {
status = TBBD_STATUS_SHGETFOLDERPATHW_FAILED;
goto l_cleanup;
}

wcscat_s(appDataPath, MAX_PATH, L"\\PitucheyHotam\\tbbd.exe");

if (!DeleteFileW(appDataPath)) {
status = TBBD_STATUS_DELETEFILEW_FAILED;
goto l_cleanup;
}

status = TBBD_STATUS_SUCCESS;
l_cleanup:
return status;
}

tbbd_status_t TBBD::Update() {
tbbd_status_t status = TBBD_STATUS_UNINITIALIZED;

Expand Down Expand Up @@ -702,3 +892,32 @@ tbbd_status_t TBBD::CheckIfInstalled(BOOL& installed) {

return status;
}

tbbd_status_t TBBD::checkForUpdates() {
tbbd_status_t status = TBBD_STATUS_UNINITIALIZED;

if (softwareInstalled) {
if (compareVersionStrings(this->ServerVersion, this->CurrentVersion) == CSTR_GREATER_THAN) {
status = Update();
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
}
// MessageBoxW(NULL, L"המילון עודכן בהצלחה!", L"מילון הבייניש הגדול", MB_OK | MB_ICONINFORMATION);
}
}
else {
status = UnInstallScheduleTask();
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
}
status = UnInstallExeFromAppdata();
if (TBBD_STATUS_SUCCESS != status) {
goto l_cleanup;
}
}

status = TBBD_STATUS_SUCCESS;
l_cleanup:

return status;
}
Loading

0 comments on commit 4d797f1

Please sign in to comment.