Keine mehrfache Instanz zulassen

tumega

Grünschnabel
Abend

Wie erreich ich das mein Prog nicht zwei mal geöffnet wird. Sobald ma auf die exe klickt soll eine Warnung kommen und es soll sich nix tun.

Habs mit Checken des Processes versucht konnt aber nicht Counten.

kann mir da jemand helfen

thx
 
leichter gesagt als getan wie binde ich den beispiel code. frage hier nach einer hilfe und nicht nach einer lösung. aber trotzdem vielen dank.
 
Hier ein Schnipsel aus einem Projekt, das genau das tut:
Code:
        // This will be set to true if this process can own the mutex. 
        bool pobjIOwnMutex = false; 

        // Try and get ownership of a mutex who's name is known. 
        System.Threading.Mutex pobjMutex = new System.Threading.Mutex(true, "MyMutex", out 
          pobjIOwnMutex); 

			  // If the mutex is owned by this process, then run the application. 
			  if (pobjIOwnMutex) 
			  { 
				  // Run the application. 
				  Application.Run(new frmMain()); 
			  } 
			  else 
			  { 
				  //exit application 
			  }

Oben muss noch ein "using System.Threading;" rein.

Ach so, das Ganze sitzt in der main().
 
Zuletzt bearbeitet:
Kannste es mir noch ein bischen erklären. Wärst ein super freund. wenn nicht trotzdem vielen vielen vielen dank.

FROHE WEIHNACHTEN :))
 
In der Routine, die das eigentliche Hauptfenster der Anwendung startet (also in der main() ), wird versucht, ein Mutex zu erstellen. Das ist eine Art systemweites Lichtsignal. Wenn es gelingt, den Mutex zu erstellen und dabei auch die "Besitzrechte" des Mutex zu erhalten (diese kann nur ein einziges Programm zu einem Zeitpunkt haben), weiss das startende Programm, dass es die erste laufende Instanz ist und nimmt seine Arbeit auf. Wenn es die "Besitzrechte" nicht bekommt, weiss es, dass es schon eine laufende Instanz gibt, und beendet sich.
 
Geht auch einfacher :) Bei meinem Projekt habe ich es so gemacht:
Code:
private static Mutex s_Mutex;

static void Main() 
{
    s_Mutex = new Mutex(true, "PC Info");
    if (s_Mutex.WaitOne(0,false))			
    {
        Application.EnableVisualStyles();
        Application.DoEvents();			
        Application.Run(new Hauptform());
    }
}
 
Zurück