Block second instance
This commit is contained in:
1 parent
3c807fbcf2
commit
760d8a632e
2 files changed
+19
No files matched your search
@@ -50,6 +50,8 @@ build\Release\ParavisInstaller.exe
|
||||
PARAVIS и немедленный выход.
|
||||
- Если рядом с установщиком есть `Change_BootLoader.exe`, он копируется на
|
||||
раздел PARAVIS после распаковки и используется вместо копии из `Data.pf`.
|
||||
- Повторный запуск установщика запрещён: второй экземпляр активирует уже
|
||||
открытое окно и сразу завершается.
|
||||
- Служебные режимы: `/selftest`, `/verify=N`, `/testdisk=N`, `/wim=путь`.
|
||||
|
||||
## Примечания
|
||||
|
||||
@@ -975,6 +975,23 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int)
|
||||
}
|
||||
}
|
||||
|
||||
HANDLE instanceMutex = CreateMutexW(nullptr, FALSE,
|
||||
L"Local\\ParavisInstaller_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"Paravis installer уже запущен.",
|
||||
L"Paravis installer", MB_ICONINFORMATION | MB_OK);
|
||||
}
|
||||
CloseHandle(instanceMutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
INITCOMMONCONTROLSEX commonControls{};
|
||||
commonControls.dwSize = sizeof(commonControls);
|
||||
commonControls.dwICC = ICC_PROGRESS_CLASS | ICC_STANDARD_CLASSES;
|
||||
|
||||
Reference in new issue
Block a user