Block second instance

This commit is contained in:
paravis committed 2026-11-08 23:25:04 +03:00
1 parent c9f01a52c1
commit 9089fbf7de
2 files changed
+19

No files matched your search

+2
View File
@@ -40,6 +40,8 @@ build\Release\Change_BootLoader.exe
- Диалоги — нативный `MessageBoxW` с теми же заголовками и текстами. - Диалоги — нативный `MessageBoxW` с теми же заголовками и текстами.
- Пока идёт установка загрузчика, все кнопки затенены; кнопка - Пока идёт установка загрузчика, все кнопки затенены; кнопка
устанавливаемого загрузчика остаётся чуть ярче. устанавливаемого загрузчика остаётся чуть ярче.
- Повторный запуск запрещён: второй экземпляр активирует уже открытое окно
и сразу завершается.
- Отладочный лог по умолчанию выключен. `PARAVIS_DEBUG_LOG=1` включает - Отладочный лог по умолчанию выключен. `PARAVIS_DEBUG_LOG=1` включает
запись в `%TEMP%\cbl_cpp_debug.log`. запись в `%TEMP%\cbl_cpp_debug.log`.
- Действие «GRUB2 Legacy» использует те же команды bootice `/sectors`, что и - Действие «GRUB2 Legacy» использует те же команды bootice `/sectors`, что и
+17
View File
@@ -375,6 +375,23 @@ void App::OnPoll()
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int) 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 app;
app.hInst = hInstance; app.hInst = hInstance;