Feedback

C# - Programm RUN Check

Veröffentlicht von am 6/30/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 6/30/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 6/30/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 7/5/2010:
Mir gefällt die Lösung von Kosmo. Die verlinkte Lösung mit dem Socket ist dagegen ein wenig komisch.. ^^
Ole schrieb am 7/7/2010:
Schön wäre ein Tip, mit dem man das evtl. schon gestartete Programm in den Vordergrund holt.
RogerH schrieb am 7/21/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 9/3/2010:
Warum den Code nicht in die Main() schreiben?
Spart das Laden der Form;
O.G. schrieb am 12/22/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!