AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrfachstart einer .exe verhindern

Ein Thema von ferby · begonnen am 26. Apr 2007 · letzter Beitrag vom 26. Apr 2007
Antwort Antwort
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#1

Mehrfachstart einer .exe verhindern

  Alt 26. Apr 2007, 12:08
Hallo,

ich habe hier vor langer Zeit ein Thread gefunden, dass meine Frage schon beantwortet hat, leider finde ich es nicht mehr

Also: Ich möchte das meine exe nur einmal gestartet werden kann, wie realiziere ich das?
Bzw. weiß Jemand welches Post das war, welches diese Frage schon beantwortet hat?


Gruß,
Ferby
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Mehrfachstart einer .exe verhindern

  Alt 26. Apr 2007, 12:17
Hi,
such doch mal nach Mutex
Mutex und Programm nicht doppelt starten
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

Re: Mehrfachstart einer .exe verhindern

  Alt 26. Apr 2007, 12:19
Den Link fand ich auch nimmer aber ich kopier mir immer interessante Sachen in Textdateien

das hatte hier mal Lemmy geschrieben

Zitat:
Manchmal möchte man nicht, dass das selbst erstellte Programm mehrmals gestartet werden kann, denn zum einen sieht es nicht unbedingt schön aus, wenn die Taskleiste voll mit der gleichen Anwendung ist, andererseits können auch Probleme entstehen, wenn mehrere gleiche Programme auf die selben Resourcen (Dateien, Speicherbereiche, Geräte, ...) zugreifen.
Man kann nun veranlassen, dass das eigene Programm beim Start prüft, ob das selbe bereits läuft. Ist das der Fall, dann wird das 2. (gleiche) Programm gar nicht erst zu Ende gestartet, sondern wieder beendet.
Im folgenden Beispiel wird ein sog. Mutex verwendet, damit Windows dein Programm identifizieren kann. Wird bei einem 2. Startversuch dann ein Mutex mit dem gleichen Namen verwendet, lässt Windows dies nicht zu und das Programm wird nicht geladen.
Durchführung:
Lass über das Menü: Ansicht > Units (oder STRG+F12) den Quelltext des Projektes anzeigen und verändere ihn, dass er dem folgenden entspricht. Allerdings solltest du die vorhandenen Namen der Forms beibehalten:
Delphi-Quellcode:
program Project1;
uses Forms,Windows,
Unit1 in 'Unit1.pas{Form1};
//-->hier stehen deine Namen der Forms bzw. Units {$R *.RES}
const
  MutexName = 'Mein Programm';
//-->quasi der Name, unter dem Windows dein Programm anspricht
var
  hMutex: THandle; begin
  hMutex := CreateMutex(NIL, True, MutexName);
//-->Versuch, dem Programm den obigen Mutex zuzuweisen
  if (hMutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then
  begin
    CloseHandle(hMutex);
    halt;
  end;
//hat es nicht geklappt, dann wird das Programm
//gar nicht erst initialisiert (also nicht gestartet)
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  CloseHandle(hMutex);
end.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#4

Re: Mehrfachstart einer .exe verhindern

  Alt 26. Apr 2007, 12:20
Hallo,

danke super
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#5

Re: Mehrfachstart einer .exe verhindern

  Alt 26. Apr 2007, 13:30
Die Mutex-Variante ist allerdings blöd, wenn ein Programm mal abstürzt und der Mutex dann nicht richtig gelöscht wird - dann lässts sich gar nicht mehr starten Gerade beim Debuggen ist der Griff zu Ctrl+F2 ja manchmal verlockend, weil so schön abkürzend.

Ich hab hier in meinem Blog noch Alternativen genannt; wenn es um eine GUI-Anwendung geht und diese ein Hauptfenster hat, finde ich FindWindow auf die Fensterklasse (da muss man natürlich nen eindeutigeren Namen als TForm1 wählen) noch am praktischsten, weil es direkt das Handle gibt, das man für SetForegroundWindow verwenden kann (somit halt das zweite Starten das Original auch noch gleich in den Vordergrund).
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz