13
0

Windows: limit to single-instance only

This may fix corrupt config files, which may happen when multiple
instances write the same file.
This commit is contained in:
Robin Gareus 2021-07-06 20:59:15 +02:00
parent 11932af65e
commit 4ac7df699d
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04

View File

@ -70,6 +70,7 @@
#include "pbd/i18n.h" #include "pbd/i18n.h"
#ifdef PLATFORM_WINDOWS #ifdef PLATFORM_WINDOWS
#include <windows.h> // CreateMutex
#include <fcntl.h> // Needed for '_fmode' #include <fcntl.h> // Needed for '_fmode'
#include <shellapi.h> // console #include <shellapi.h> // console
#endif #endif
@ -337,6 +338,17 @@ int main (int argc, char *argv[])
<< endl; << endl;
} }
#ifdef PLATFORM_WINDOWS
CreateMutexA (0, 1, string_compose ("%1%2", PROGRAM_NAME, PROGRAM_VERSION).c_str ());
if (GetLastError() == ERROR_ALREADY_EXISTS) {
Gtk::Main main (argc, argv);
Gtk::MessageDialog msg (string_compose (_("%1 is already running."), PROGRAM_NAME),
false, Gtk::MESSAGE_ERROR , Gtk::BUTTONS_OK, true);
msg.run ();
exit (EXIT_FAILURE);
}
#endif
#ifdef HAVE_DRMINGW #ifdef HAVE_DRMINGW
/* prevent missing libs popups */ /* prevent missing libs popups */
UINT prev_error_mode = SetErrorMode (SEM_FAILCRITICALERRORS); UINT prev_error_mode = SetErrorMode (SEM_FAILCRITICALERRORS);