C# Mutex prüfung ob Prozess bereits läuft

R²-H

Lt. Junior Grade
Registriert
Mai 2008
Beiträge
266
Hallo Community,
würde gerne checken ob meine Anwendung bereits gestartet ist.
Habe gehört das soll man mit Mutex am Besten hinbekommen.

Ist da jmd. schon vorbelastet, und kann mir helfen ?

Grüße
 
Sorry, aber für so einfache "Probleme" ist ein Forum nicht da. Du kannst dich gern wieder melden, wenn du Probleme beim Erstellen von Mutexes hast, aber doch nicht um zu fragen, wie man diese nutzt...
 
Wenn es so "einfach" für euch ist wäre es wahrscheinlich am schnellsten gewesen es hier zu posten wie es funktioniert oder nicht ?!
Diese 6 Unnötigen Post sind auf jeden Fall nicht sehr professionell Oo

Bringt mich jetzt sehr viel weiter...
 
Sorry, aber das findet man in ein paar Sekunden. Warum sollen wir für dich eine Suchmaschine füttern?
 
Tja unser Postcounter steigt so viel schneller an. Wozu helfen, wenn man sich auch quer stellen kann?

Btw. wenn du programmieren willst, solltest du die suche verwenden. Vieles davon ist schon 100x da.
 
Jetzt mal ehrlich Leute er hat gefragt ob das mit dem Mutex 'ne gute Idee ist um zu ueberpruefen ob das Prgramm schon laeuft. Er hat nicht danach gefragt wie letztendlich die Implementation aussehen soll. Wenn ihr keine Lust habt zu helfen, dann postet bitte nicht. Die Frage war keinesfalls unverschaemt.
 
Die Frage heißt für mich eher: Ich würde gern Mutexe benutzen, habt ihr Code Snippets für mich? Wenn er gemeint hätte, ob das eine gute Idee sei, dann hätte er das auch geschrieben.

Und wie du siehst, sind die anderen Poster genau der selben Meinung und verlinken einfach.
 
Vektor schrieb:
Jetzt mal ehrlich Leute er hat gefragt ob das mit dem Mutex 'ne gute Idee ist um zu ueberpruefen ob das Prgramm schon laeuft. Er hat nicht danach gefragt wie letztendlich die Implementation aussehen soll. Wenn ihr keine Lust habt zu helfen, dann postet bitte nicht. Die Frage war keinesfalls unverschaemt.

Leute belehren kann jeder aber dann noch kompetent zu antworten fällt wohl auch dir schwer.

@R²-H: Ja du kannst das mit einem Mutex machen.

Vielleicht hilft dir das bei der Lösung deines Problems weiter:

http://joelbennett.wordpress.com/20...tiple-copies-of-an-application-from-runningc/
 
Prinzipiell geht das über ne Mutex so:

Du legst beim Programmstart eine eindeutig bezeichnete an und versuchst diese zu locken. Wenn es klappt, hast du gerade die erste Instanz deines Programms gestartet. Wenn es fehlschlägt, hast du eine weitere Instanz gestartet und kannst diese beenden und evtl vorher noch das Hauptfenster der schon laufenden Instanz suchen und in den Vordergrund bringen.

Diese Methode öffnet aber die Möglichkeit einer DoS-Attacke auf dein Programm: Wenn jemand anderes den Namen deiner Mutex weiß, kann dieser die locken und dann kann nicht mal die erste Instanz deines Programms gestartet werden.
 
Du bräuchtest wohl nen Global Mutex - entsprechende Beispiele (und bereits gut beschriebene - kein Grund alles zu kopieren) sollten sich mit ein wenig Google-Benutzung einfach finden lassen.

Ein paar Überlegungen hierzu:
Man braucht die entsprechenden Privilegien für so einen Mutex.

Wie global soll der Mutex denn sein? Pro Benutzer? Über alle Benutzer? (Stichwort: Sitzung wechseln) In letzterem Fall wäre evtl. ein Dienst sinnvoller. Jetzt könnte man sich noch die Frage stellen, wie das auf nem Terminal Server richtig funktioniert. ;)
 
Ich bin mal so nett und gebe ein Beispiel:

Code:
//Set Mutex Name
            string currentMutex = "Mutex1";
            bool bMutex;

            //Open Mutex to check if process already running
            System.Threading.Mutex mutex = new System.Threading.Mutex(true,currentMutex.ToLower(), out bMutex);

            try
            {
                //Check Mutex
                if (bMutex)
                {
                    try
                    {
                        //hier dein Code
                    }
                    catch (Exception ex)
                    {
                        AppEventLog.ThrowUnexpectedErrorQuitApp("Process Bla ended unexpectly.", ex);
                    }
                    finally
                    {
                                              
                        
                        //Release Icons
                        mutex.ReleaseMutex();
                    }
                }
            }
            finally
            {
                //Close Mutex
                mutex.Close();
                mutex = null;
            }
 
Zurück
Oben