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
Thema durchsuchen
Ansicht
Themen-Optionen

Verhindern eine Anwendung mehrfach zu starten

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

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

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
Carsten Hölscher

Registriert seit: 29. Jul 2008
77 Beiträge
 
Delphi 11 Alexandria
 
#2

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

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.588 Beiträge
 
Delphi 12 Athens
 
#3

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).
Ein Therapeut entspricht 1024 Gigapeut.

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.691 Beiträge
 
Delphi 11 Alexandria
 
#4

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.600 Beiträge
 
Delphi 7 Professional
 
#5

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
752 Beiträge
 
Delphi 10.3 Rio
 
#6

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
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Delphi.Narium

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

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
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Verhindern eine Anwendung mehrfach zu starten

  Alt 14. Jan 2022, 09:33
Jupp, genau das meinte ich. Ich hatte es lediglich um ein paar für mich speziellere Dinge erweitert wo ich mir gerade den Quelltext anschaue und vergleiche
(ich wollte noch eine option haben die steuert ob programm a.exe parameter an b.exe übergibt, ob b.exe vor dem ".run" von a.exe terminiert werden soll usw... paar spielereien halt)
Wie dem auch sei, das rad muss nicht neu erfunden werden, soll nicht bedeuten das die Quelltexte der anderen falsch sind, um gottes willen nein, nur mach ich mir darüber keine gedanken mehr.
Lieber würde ich die PBOnceOnly.pas CrossPlatform fähig machen
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
77 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Verhindern eine Anwendung mehrfach zu starten

  Alt 15. Jan 2022, 17:16
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:

....
Ja, geht. Vielen Dank. Da war ich immerhin irgendwie schon ganz nah dran bei meinen eigenen Versuchen

In dem Komponenten-Thema kann ich ja nicht schreiben, vielleicht kann es da jemand entsprechend aktualisieren?

Carsten
  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 11:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz