Feedback

C# - Programm RUN Check

Veröffentlicht von am 30.06.2010
(1 Bewertungen)
Mit diesem Code kann ermittel werden ob das Programm schon läuft. so kann verhindert werden das es mehrfach ausgeführt wird.
using System.Diagnostics;  

 string StartTaskname = "MeinProgrammName"; // Taskname
 int ProgrammOK = 0;


 public void FirstRun()
        {
            // Pragamm nicht mehrmals Starten
            int ProgrammCount = 0;
            Process[] ProgrammTask = Process.GetProcesses();
            foreach (Process ScannTask in ProgrammTask)
            {
                if (ScannTask.ProcessName == StartTaskname) ProgrammCount = ProgrammCount + 1;
            }
            if (ProgrammCount > 0)
            {
                MessageBox.Show("Error\nDas Programm kann nicht mehrmals gestartet werden.", "Programm Error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                ProgrammOK = 1;
                this.Close();
            }
            else
            {
                ProgrammOK = 0;
		// Weitere Programm Code´s
		//...
            }
        }



        private void Form1_Load(object sender, EventArgs e)
        {
	    try
		{
            	ProgrammStart();
		}
	    catch
		{
		// Fehler
		//...
		}
        }
Abgelegt unter Programm RUN, Check, Task, .

7 Kommentare zum Snippet

O.G. schrieb am 30.06.2010:
Ich weiss das " ProgrammOK = 1; " überflüssig ist! Aber falls sich das Programm irgendeine Grund NICHT beendet hab ich nich eine Sicherung!
Kosmo schrieb am 30.06.2010:
Das Problem lässt sich wesentlich einfacher mit einem Mutex lösen:
Zum Beispiel:

bool instanziert;
Mutex mutex = new Mutex(false, "Local\\" + programmName, out instanziert);


(http://en.csharp-online.net/CSharp_FAQ:_How_ensure_that_only_one_instance_of_an_application_will_run)
Keks1911 schrieb am 05.07.2010:
Mir gefällt die Lösung von Kosmo. Die verlinkte Lösung mit dem Socket ist dagegen ein wenig komisch.. ^^
Ole schrieb am 07.07.2010:
Schön wäre ein Tip, mit dem man das evtl. schon gestartete Programm in den Vordergrund holt.
RogerH schrieb am 21.07.2010:
Das Ganze funktioniert auf einem Terminal Server nicht, da kann das Programm in einer anderen Session bereits gestartet sein und das wäre dann OK. Daher zusätzlich mit EigenerProzess = Process.GetCurrentProcess den eigenen Prozess holen auf ScannTask.SessionID <> EigenerProzess.SessionID vergleichen.

Den Zähler kann man dann vermeiden, indem man auch noch auf ScannTask.Id <> EigenerProzess.Id vergleicht.
Martin Dauskardt schrieb am 03.09.2010:
Warum den Code nicht in die Main() schreiben?
Spart das Laden der Form;
O.G. schrieb am 22.12.2010:
@Martin,
Weil das ein teile eine Klasse ist und ich nicht die ganze Klasse hir rein setzten wollte. Es ist nur als Demo ich schreib in " Form1_Load " nur die Aufrufe
so halt ich den ganzen Quelltext sauber.

MFG Oliver G
 

Logge dich ein, um hier zu kommentieren!