AGB  ·  Datenschutz  ·  Impressum  







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

Doppelstart einer Anwendung

Ein Thema von Hador · begonnen am 18. Nov 2006 · letzter Beitrag vom 19. Nov 2006
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#1

Doppelstart einer Anwendung

  Alt 18. Nov 2006, 20:45
Hallo,

ich versuche grad den doppelstart einer Anwendung zu verhindern.
Dazu hab ich in der CodeLib einen Beitrag von Luckie gefunden.

Meine Umsetzung sieht folgendermaßen aus:
Delphi-Quellcode:
var
  mHandle: THandle;
  i: Integer;

begin
  mHandle := CreateMutex(nil, True, PAnsiChar(ParamStr(0)));
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    for i := 1 to ParamCount do
      CopyData(mHandle, ParamStr(i)); // Parameter der 1. Instanz übergeben
    Application.Terminate;
  end;
  Application.Initialize; // Ggf. Formulare erzeugen
  Application.CreateForm(TGUI, GUI);
  Application.Run;
  if mHandle <> 0 then
    CloseHandle(mHandle)
end.
Mein Problem ist nur, dass es so aus irgendeinem Grund nicht funktioniert.
Nur der Grund ist mir nicht bekannt
Ich hoffe also mal wieder auf euch
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#2

Re: Doppelstart einer Anwendung

  Alt 18. Nov 2006, 21:09
Und was funktioniert nicht?

Übrigens: Statt Application.Terminate ein Exit;
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Doppelstart einer Anwendung

  Alt 18. Nov 2006, 21:33
Der Sinn dieses Codes soll sein, dass die Anwendung nicht doppelt gestartet wird.
Und genau das funktioniert nicht.

Ob Exit oder App.Terminate ist egal.
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#4

Re: Doppelstart einer Anwendung

  Alt 18. Nov 2006, 22:03
Hi,

was liefert dir mHandle, wenn deine Anwendung bereits läuft und was wenn sie nicht läuft?
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Doppelstart einer Anwendung

  Alt 18. Nov 2006, 22:15
Jeweils 0

Also sollte es daran liegen, aber ich weiß immer noch nicht, was faclsch ist.
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#6

Re: Doppelstart einer Anwendung

  Alt 18. Nov 2006, 22:37
Das liegt daran, das Du Deinen Pfad & Dateinamen übergibst, verwende einen eindeutigen Namen, dann klappts.

Den Fehlercode von GetLastError beachten.

Edit: Und dennoch: Statt Application.Terminate ein Exit;
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#7

Re: Doppelstart einer Anwendung

  Alt 18. Nov 2006, 22:42
Ich zitiere mal das msdn:

Zitat:
Return Value

If the function succeeds, the return value is a handle to the newly created mutex object.

If the function fails, the return value is NULL. To get extended error information, call GetLastError.

If the mutex is a named mutex and the object existed before this function call, the return value is a handle to the existing object, GetLastError returns ERROR_ALREADY_EXISTS, bInitialOwner is ignored, and the calling thread is not granted ownership. However, if the caller has limited access rights, the function will fail with ERROR_ACCESS_DENIED and the caller should use the OpenMutex function.
Was liefert GetlastError?
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#8

Re: Doppelstart einer Anwendung

  Alt 18. Nov 2006, 22:47
ERROR_PATH_NOT_FOUND (3) = 'Pfad nicht gefunden'
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#9

Re: Doppelstart einer Anwendung

  Alt 18. Nov 2006, 22:51
Der Pfadname kann variieren, er sollte allerdings konstant sein, ansonsten bräuchte man das Programm nur in einen anderen Ordner kopieren und starten. Habe das ganze nicht getestet, meine Vermutung sollte dennoch stimmen.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#10

Re: Doppelstart einer Anwendung

  Alt 18. Nov 2006, 22:59
Zitat von Windows SDK:
lpName:
Points to a null-terminated string specifying the name of the mutex object. The name is limited to MAX_PATH characters and can contain any character except the backslash path-separator character (\). Name comparison is case sensitive.
Tut es aber nicht, CreateMutex nimmt den Pfad erst gar nicht an, das Handle ist IMMER Null, deshalb erledigt sich die Frage schon...

Edit: Also wenn schon, dann ExtractFileName(ParamStr(0));
Aber wenn man die Exe kopiert, umbenennt und nochmal startet...
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 05:57 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