mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2024-12-26 07:04:12 +08:00
66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
#pragma comment(linker, "/subsystem:windows /entry:wmainCRTStartup")
|
|
|
|
int updatewmain(int argc, wchar_t *argv[])
|
|
{
|
|
if (argc <= 1)
|
|
return 0;
|
|
SetProcessDPIAware();
|
|
AutoHandle hMutex = CreateMutex(NULL, FALSE, L"LUNA_UPDATER_SINGLE");
|
|
|
|
if (GetLastError() == ERROR_ALREADY_EXISTS)
|
|
return 0;
|
|
while (true)
|
|
{
|
|
AutoHandle semaphore = CreateMutex(NULL, FALSE, L"LUNA_UPDATER_BLOCK");
|
|
if (GetLastError() != ERROR_ALREADY_EXISTS)
|
|
break;
|
|
Sleep(1000);
|
|
}
|
|
WCHAR path[MAX_PATH];
|
|
GetModuleFileNameW(GetModuleHandle(0), path, MAX_PATH);
|
|
|
|
*(wcsrchr(path, '\\')) = 0;
|
|
*(wcsrchr(path, '\\')) = 0;
|
|
|
|
SetCurrentDirectory(path);
|
|
int needreload = std::stoi(argv[1]);
|
|
try
|
|
{
|
|
std::filesystem::remove_all(L".\\files_old");
|
|
std::filesystem::rename(L".\\files", L".\\files_old");
|
|
std::filesystem::copy(argv[2], L".\\", std::filesystem::copy_options::recursive | std::filesystem::copy_options::overwrite_existing);
|
|
try
|
|
{
|
|
std::filesystem::remove_all(L".\\files_old");
|
|
}
|
|
catch (...)
|
|
{
|
|
}
|
|
}
|
|
catch (std::exception &e)
|
|
{
|
|
try
|
|
{
|
|
std::filesystem::rename(L".\\files_old", L".\\files");
|
|
}
|
|
catch (...)
|
|
{
|
|
}
|
|
MessageBoxA(GetForegroundWindow(), (std::string("Update failed!\r\n") + e.what()).c_str(), "Error", 0);
|
|
ShellExecute(0, L"open", (std::wstring(argv[3]) + L"/Github/LunaTranslator/releases").c_str(), NULL, NULL, SW_SHOWNORMAL);
|
|
return 0;
|
|
}
|
|
try
|
|
{
|
|
std::filesystem::remove_all(argv[2]);
|
|
}
|
|
catch (std::exception &e)
|
|
{
|
|
}
|
|
MessageBoxW(GetForegroundWindow(), L"Update success", L"Success", 0);
|
|
if (needreload)
|
|
{
|
|
ShellExecute(0, L"open", L".\\LunaTranslator.exe", NULL, NULL, SW_SHOWNORMAL);
|
|
}
|
|
return 0;
|
|
} |