navicat-keygen/navicat-patcher/_tmain.cpp
2018-03-29 14:26:16 +08:00

57 lines
2.2 KiB
C++

#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 == 0x00190000) { // for navicat ver = 12.0.25
status = patcher::Solution1::Do(libcc_dll_path.c_str(), argc == 3 ? argv[2] : nullptr);
} else if (NavicatMajorVersion == 0x000C0000 && NavicatMinorVersion == 0x001A0000) { // for navicat ver = 12.0.26
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;
}