Exe allg. - doppelstart vermeiden



  • fehler im thema. muß natürlich verhindern heissen http://www.c-plusplus.net/ubb/ubb/smile.gif

    hi,

    kann mir jemand sagen, wie ich es verhindern kann das meine anwendung (einfache exe) zweimal gestartet werden kann

    also in VB wäre das kein problem http://www.c-plusplus.net/ubb/ubb/smile.gif

    [Diese Nachricht wurde von MadCro am 11-06-2001 editiert.]



  • Hi Mad,
    ein Problem ist es in C++ auch nicht. (zumindest kein unlösbares...)

    Erstelle beim Start Deiner Anwendung mit:

    ////////////////////////////////////////////////////////////////////////////
    // Mutex erstellen, damit ueberprueft werden kann, ob
    // Programm schon gestartet wurde:
    char *psMutexName = "Programmname";    // Hier bekommt das Kind einen Namen
    DWORD dwError;
    CreateMutex(NULL, true, psMutexName);
    // Fehlermeldung holen:
    dwError = GetLastError();
    // Wenn Mutex schon erstellt, Programm beenden:
    if (ERROR_ALREADY_EXISTS == dwError)
        CDialog::OnOK();
    ////////////////////////////////////////////////////////////////////////////
    

    einen Mutex. Dieser Mutex wird IMHO beim schließen Deiner Anwendung automatisch zerstört, so dass Du Dich darum nicht weiter kümmern musst.

    Sollte dieser Mutex schon bestehen (was der Fall wäre, wenn Du Deine Anwendung zum 2. Mal startest), wird eine Fehlermeldung (ERROR_ALREADY_EXISTS) zurückgegeben, auf die Du reagieren und die 2. Anwendung wieder schliessen kannst.
    (-siehe Beispielcode-) http://www.c-plusplus.net/ubb/ubb/biggrin.gif

    -hoffe, ich habe das alles korrekt erklärt...
    cu Joshi

    ------------------
    ...ich muss weg!



  • Hallo!!

    Du erstellst einfach am anfang deines programms eine mutex, sie hat einen einzigartigen namen und kann deshalb auch nur einmal erstellt werden. Danach überprüfst du mittels GetLastError() auf ERROR_ALREADY_EXISTS. Wenn das so ist, beendest du das Programm, weil es schon eine instanz davon gibt. Ansonsten geht es ganz normal weiter.
    Das Ganze könnte dann in etwa so aussehen:

    HANDLE    hMutex;
    hMutex = CreateMutex(NULL, TRUE, "MutextName");
    if(GetLastError() == ERROR_ALREADY_EXISTS)
    {
    PostQuitMessage(0);//Mutex gibts schon,Programm beenden
    }
    //weiter im Programm
    

    ich würd sagen, dass musst du bei PreCreateWindow einfügen, aber vielleicht weiß das auch jemand anderes genauer.

    Ich hoffe, es hat etwas weitergeholfen..

    ------------------
    Bis dann...
    **
    ..:: ASTRATIS ::..
    astratis@gmx.net**

    [Diese Nachricht wurde von Astratis am 11-06-2001 editiert.]



  • ej leute großen Dank.
    funkzt das ding http://www.c-plusplus.net/ubb/ubb/smile.gif

    [Diese Nachricht wurde von MadCro am 11-06-2001 editiert.]



  • -hat sich wohl erledigt-

    [Diese Nachricht wurde von Joshi am 11-06-2001 editiert.]


Anmelden zum Antworten