| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #include "def.hpp"
- namespace std {
- #ifdef UNICODE
- typedef wstring Tstring;
- #else
- typedef string Tstring;
- #endif
- }
- int _tmain(int argc, TCHAR* argv[]) {
- if (argc != 2 && argc != 3) {
- _tprintf_s(TEXT("Usage:\r\n"));
- _tprintf_s(TEXT(" navicat-patcher.exe <Navicat installation path> [RSA-2048 PEM file]\r\n"));
- return 0;
- }
- { // check path validity
- DWORD attr = GetFileAttributes(argv[1]);
- if (attr == INVALID_FILE_ATTRIBUTES) {
- _tprintf_s(TEXT("Failed to get installation path attribute. CODE: 0x%08x @[GetFileAttributes]\r\n"), GetLastError());
- return 0;
- }
- if ((attr & FILE_ATTRIBUTE_DIRECTORY) == 0) {
- _tprintf_s(TEXT("Error: Path is not a directory.\r\n"));
- return 0;
- }
- }
- std::Tstring navicat_exe_path(argv[1]);
- if (navicat_exe_path.back() != TEXT('/') && navicat_exe_path.back() != TEXT('\\'))
- navicat_exe_path.push_back(TEXT('\\'));
- navicat_exe_path += TEXT("navicat.exe");
- std::Tstring libcc_dll_path(argv[1]);
- if (libcc_dll_path.back() != TEXT('/') && libcc_dll_path.back() != TEXT('\\'))
- libcc_dll_path.push_back(TEXT('\\'));
- libcc_dll_path += TEXT("libcc.dll");
- DWORD NavicatMajorVersion;
- DWORD NavicatMinorVersion;
- if (!patcher::GetNavicatVerion(navicat_exe_path.c_str(), &NavicatMajorVersion, &NavicatMinorVersion))
- return 0;
-
- BOOL status;
- if (NavicatMajorVersion <= 0x000C0000 && NavicatMinorVersion < 0x00190000) { // for navicat ver < 12.0.25
- status = patcher::Solution0::Do(navicat_exe_path.c_str());
- } else if (NavicatMajorVersion == 0x000C0000 && NavicatMinorVersion <= 0x001C0000) { // for navicat ver <= 12.0.28
- status = patcher::Solution1::Do(libcc_dll_path.c_str(), argc == 3 ? argv[2] : nullptr);
- } else {
- _tprintf_s(TEXT("Warning: Unknown version detected, still continue? [y/n] "));
- TCHAR selection = _gettchar();
- if (selection == 'Y' || selection == 'y')
- status = patcher::Solution1::Do(libcc_dll_path.c_str(), argc == 3 ? argv[2] : nullptr);
- }
- _tprintf_s(TEXT("%s\r\n"), status == TRUE ? TEXT("Success!") : TEXT("Failed!"));
- return 0;
- }
|