diff --git a/README.md b/README.md index ac4ebfc..632498c 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,8 @@ build\Release\Change_BootLoader.exe - Диалоги — нативный `MessageBoxW` с теми же заголовками и текстами. - Пока идёт установка загрузчика, все кнопки затенены; кнопка устанавливаемого загрузчика остаётся чуть ярче. +- Повторный запуск запрещён: второй экземпляр активирует уже открытое окно + и сразу завершается. - Отладочный лог по умолчанию выключен. `PARAVIS_DEBUG_LOG=1` включает запись в `%TEMP%\cbl_cpp_debug.log`. - Действие «GRUB2 Legacy» использует те же команды bootice `/sectors`, что и diff --git a/src/main.cpp b/src/main.cpp index baac28e..cc76f5c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -375,6 +375,23 @@ void App::OnPoll() int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int) { + HANDLE instanceMutex = CreateMutexW(nullptr, FALSE, + L"Local\\ChangeBootLoader_SingleInstance"); + if (instanceMutex && GetLastError() == ERROR_ALREADY_EXISTS) { + HWND existing = FindWindowW(kMainClass, nullptr); + if (existing) { + if (IsIconic(existing)) { + ShowWindow(existing, SW_RESTORE); + } + SetForegroundWindow(existing); + } else { + MessageBoxW(nullptr, L"Change BootLoader уже запущен.", + kWindowTitle, MB_ICONINFORMATION | MB_OK); + } + CloseHandle(instanceMutex); + return 0; + } + App app; app.hInst = hInstance;