AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verhindern eine Anwendung mehrfach zu starten

Verhindern eine Anwendung mehrfach zu starten

Ein Thema von Moony · begonnen am 6. Mai 2008 · letzter Beitrag vom 15. Jan 2022
Antwort Antwort
Seite 5 von 6   « Erste     345 6   
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#41

Re: Verhindern eine Anwendung mehrfach zu starten

  Alt 6. Mai 2008, 21:03
Ich persönlich würde erst garnicht soweit gehen, die Dateigröße o.Ä. zu verwenden, es reicht doch eigentlich völlig aus, wenn man einen Inviduellen String benutzt (ok, der sollte jetzt nicht nur 1 Zeichen lang sein ). Ich glaube, da sind die Wahrscheinlichkeiten, dass ein anderes Programm einen Mutex anlegt, den Wert prüft und dann auch noch den gleichen Wert hat, schon relativ klein.
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.984 Beiträge
 
Delphi 7 Professional
 
#42

Re: Verhindern eine Anwendung mehrfach zu starten

  Alt 6. Mai 2008, 21:10
Ja, schätze ich auch so ein. Schön wäre es aber, wenn dieser individuelle String automatisch in der Unit erzeugt wird - die will ich ja einfach nur (ohne weitere Arbeit) in das Projekt einfügen....

// edit: Noch ein letztes Mal nachgedacht:
Das Umbenennen der Exedatei ist nur kritisch, wenn das Programm nach dem ersten Start umbenannt und unter neuem Namen erneut aufgerufen würde - nur dann greift der Test ins Leere. So viel Vorsatz sollte dann auch dadurch belohnt werden, das die zweite Instanz tatsächlich gestartet wird. Mein Fazit: Ich lasse meine Unit wie sie ist
Ralph
  Mit Zitat antworten Zitat
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#43

AW: Re: Verhindern eine Anwendung mehrfach zu starten

  Alt 11. Dez 2010, 11:08
Moin, Moin,
vielleicht kann die Suche nach einer Lösung abgekürzt werden. Ich verwende seit Jahren mit Erfolg folgende Unit...

Delphi-Quellcode:
unit rzM_OneInstanceOnly;

// Unit lediglich in das Projekt aufnehmen, danach werden mehrere Instanzen
// des Programmes unterbunden; bei erneutem Aufruf wird automatisch die
// erste Instanz aktiviert.

interface { ----------------------------------------------------------------- }

implementation { ------------------------------------------------------------ }

uses Forms,SysUtils,Windows;

var Mutex : THandle;
     MName : String;
     h : HWnd;

initialization { ------------------------------------------------------------ }

 MName:=ExtractFileName(ChangeFileExt(Application.ExeName,'_MTX'));
 Mutex:=CreateMutex(nil,true,pchar(MName)); // Mutex anlegen

 if GetLastError=ERROR_ALREADY_EXISTS then begin // Fehler, Pgm schon aktiv!

   h:=0; // vorhandene Instanz suchen
   repeat
     h:=Windows.FindWindowEx(0,h,PChar('TApplication'),PChar(Application.Title))
     until h<>Application.Handle;

   if h<>0 then begin // aktivieren
     Windows.ShowWindow(h,SW_Restore);
     Windows.SetForegroundWindow(h);
     end;

   halt; // und diesen zweiten Aufruf beenden!
   end;

finalization { -------------------------------------------------------------- }

  ReleaseMutex(Mutex); // Mutex der ersten Instanz wieder freigeben!

end.
Wie mache ich denn daraus eine Unit? Eine Datei Namens "rzM_OneInstanceOnly.pas" erstellen und in das Projektverzeichnis kopieren?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.367 Beiträge
 
Delphi 11 Alexandria
 
#44

AW: Verhindern eine Anwendung mehrfach zu starten

  Alt 11. Dez 2010, 14:41
Ja sicher.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
55 Beiträge
 
Delphi 11 Alexandria
 
#45

AW: Verhindern eine Anwendung mehrfach zu starten

  Alt 12. Jan 2022, 18:40
Ich wollte die hier https://www.delphipraxis.net/101-dop...erhindern.html angebotene Komponente in Delphi 11 nutzen, bekomme aber den Parameter beim 2. Start in der laufenden Instanz nicht korrekt, z.B. ist der 2. Teil des Parameter-Strings nur Salat. Ist sicherlich irgendein Unicode-Problem, das ich aber noch nicht durchdrungen habe. Hat zufällig schon mal jemand die Komponente auf den aktuellen Stand gebracht (oder hat Delphi evtl. inzwischen eine Hauslösung für das Thema, gefunden hab ich keine)?


Carsten
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.181 Beiträge
 
Delphi 10.4 Sydney
 
#46

AW: Verhindern eine Anwendung mehrfach zu starten

  Alt 12. Jan 2022, 19:21
Es lebe Unicode ... der Code war noch aus Zeiten von vor 2009

Hab's nicht getestet, aber ich denke mal so müsste es aussehn:

Delphi-Quellcode:
{ 604 OneInstance.pas }

          SetString(S, PChar(lpData), cbData div 2);

    cbData:= StrLen(lpData) * 2;
Delphi-Quellcode:
{ 149 OneInst.pas }

  cbData := cbData * 2;
  Result := GetMemory(cbData);
Bzw. wenn man es ganz genau nimmt, dann statt 2 besser ein SizeOf(Char) .

Aber 100% richtiger wäre es, wenn man den Code "richtig" fest auf UnicodeString/WideString, PWideChar und 2 umstellt, anstatt String, PChar und SizeOf(Char).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (12. Jan 2022 um 19:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.253 Beiträge
 
Delphi 10.3 Rio
 
#47

AW: Verhindern eine Anwendung mehrfach zu starten

  Alt 12. Jan 2022, 19:52
Falls das nicht funktioniert, ich nutze seit Ewigkeiten "PBOnceOnly" geschrieben von Dr. Peter Below, funktioniert bei mir tadellos.
Einfachmal nach "PBOnceOnly" hier oder per google suchen.
Ich habe leider nur noch eine von mir modifizierte Version, was ich modifizierte, abgesehen vom unit namen, habe ich aus dummheit nicht notiert aber es arbeitet tadellos mit Delphi Rio zusammen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.025 Beiträge
 
Delphi 7 Professional
 
#48

AW: Verhindern eine Anwendung mehrfach zu starten

  Alt 12. Jan 2022, 20:35
PBOnceOnly.pas
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
330 Beiträge
 
Delphi 10.3 Rio
 
#49

AW: Verhindern eine Anwendung mehrfach zu starten

  Alt 13. Jan 2022, 06:35
Ich habe eine Lösung nur für Windows.
Verwende ich seit vielen Jahren in allen Programmen die es nötig haben.
Keine extra Unit, keine Komponente (wäre eh viel zu spät), keine Kopfschmerzen.

Das kommt direkt in die DPR:
Delphi-Quellcode:
// direkt nach begin
Mutex := CreateMutex(nil, True, 'EindeutigerName'); // das sollte am besten eine selbst erzeugte Class ID sein. Dann ist "eindeutig" recht sicher
if (Mutex <> 0) and (GetLastError = 0) then
  MutexError := false
else
  MutexError := true;
...
// alles was das programm so macht
...
// direkt vorm end
if Mutex <> 0 then
  CloseHandle(Mutex);
Natürlich sollte man den Mutex am Ende immer freigeben.
Aber zum Glück räumt auch Windows alles weg wenn der Prozess mal unerwartet übern Jordan geht.
Stefan
Wo befindet das Universum? Welche Farbe hat es ohne Zeit? Welcher Leiter leitet gravimetrische Energie?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.025 Beiträge
 
Delphi 7 Professional
 
#50

AW: Verhindern eine Anwendung mehrfach zu starten

  Alt 13. Jan 2022, 11:22
Das ist die einfachste Lösung, wenn man sicherstellen will, dass ein Programm nur einmal gestartet wird.

Was diese Lösung aber nicht kann:

Die übergebenen Parameter an die erste Instanz weiterreichen, damit diese damit weiterarbeiten kann.

Und genau da liegt ja aktuell das Problem.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf