On Monday, 22 February 2021 at 02:39:58 UTC, Steven Schveighoffer wrote:
On 2/21/21 9:29 PM, Preetpal wrote:
I want to restrict a D application to a single instance. Is there a way to do this using the D standard library?

When you say "application", you mean a class or type?


I decided to implement what I meant (single application (executable) instance restriction) using the Windows API (since my application only runs on Windows currently anyways):

// Ensures only one instance of application can run at one time HANDLE globalMutexHandle = CreateMutex(NULL, true, "multi-monitor-window-maximization");
    if (globalMutexHandle == NULL) {
        return -1;
    }
    DWORD lastErrorAfterMutexCreationAttempt = GetLastError();
if (lastErrorAfterMutexCreationAttempt == ERROR_ALREADY_EXISTS) {
        return -2;
} if (lastErrorAfterMutexCreationAttempt == ERROR_INVALID_HANDLE) {
        return -3;
    }
    scope(exit) {
        ReleaseMutex(globalMutexHandle);
        CloseHandle(globalMutexHandle);
    }

This prevents someone from opening my particular application twice (so there cannot be two processes running of the same application/executable). I also updated by Github GIST code with the update.

Reply via email to