AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verhindern das die gleich Exe gestartet wird
Thema durchsuchen
Ansicht
Themen-Optionen

Verhindern das die gleich Exe gestartet wird

Ein Thema von meisteralex · begonnen am 28. Nov 2005 · letzter Beitrag vom 29. Nov 2005
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#1

Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 08:07
Moint,
also mittlerweile weiß ich wie ich verhindern kann, dass zweimal das gleich Programm gestartet wird.
Habe das mit der marix-Methode realisiert (hoffe die sagt jemandem was, hab sie aber glaub ich auch aus diesem Forum).
Nun will ich aber nicht generell verhindern, dass mein Programm zweimal gestartet wird, sondern nur dass die gleiche exe zweimal gestartet wird. Sprich, wenn ich 2 identische Exe habe, wovon einen nr1.exe heißt und eine nr2.exe, dann soll ein Doppelstart möglich sein. Habe ich jedoch 2 Exes mit dem gleichen Namen nr1.exe und nr1.exe soll ein Merhfachstart verhindert werden. Dies alles soll unabhängig sein von den Pfaden in denen die exe-Dateien liegen.

Hat hierzu jemand ne Lösung ? weiß nämlich irgendwie nciht recht wie ich das machen soll?!?!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 08:15
Hai meisteralex,

deine "marix-Methode" kenn ich nicht. Ich mache das immer mit einem Mutex so wie hier beschrieben.

Jetzt kannst Du ja als "String für den Mutex" einfach den Namen der Exe plus einer GUID verwenden.
Delphi-Quellcode:
begin
 .
 .
 mutexstring := '{1F31C742-E52D-4EC0-8632-02BEAFA3337E}' + ExtractFileName(ParamtStr(0));
  mHandle := CreateMutex(nil,True,mutexstring);
 .
 .
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 08:41
Wenn Du die EXE selbst geschrieben hast, dann würd ich das auch über 'Mutexe' abbilden. Wenn nicht, hilft Dir 'FindWindows' weiter. Es liefert Dir, sofern vorhanden, das Handle eines Fensters mit einer bestimmten Titelzeile und einem Klassennamen. Wenn FindWindows einen Wert<>0 liefert, läuft das Programm schon.

Du musst nur noch rausfinden, wie die Fensterklasse (und ggf. der Titel) des Hauptfensters der Anwendung heisst. Dafür verwende ich EnumWindows. Ich hab mir mal ein kleines Programm geschrieben, das die Fenstertitel und Fensterklassen auflistet. Check mal EnumWindows, das ist dann ganz einfach.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#4

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 09:28
genau, meinte auch mutex
genau so habe ich es auch schon probiert, als argument habe ich den konstaten string gegen den paramstr(0), also den exe-namen ausgetauscht. Wozu ist die GUID denn noch nötig?
Wenn ich den EXE-Namen mit Hilfe von parmastr(0) als Argument der CreateMutex - Anweisung übergebe kann ich auch 2 mal die gleiche Datei ausführen, der "mehrfachstar-verhinderungs-effekt" ist also vollkommen weg.
Hat das irgendwas mit der GUID zu tun`?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 09:33
Zitat von meisteralex:
... gegen den paramstr(0), also den exe-namen ausgetauscht. ...
Hai Du,

bitte beachte aber das Du mit ParamStr(0) nicht nur den Exe-Namen sondern auch den Pfad zu dieser bekommst. Wenn die selbe Exe in zwei Verzeichnissen liegt hast Du verschiedene Strings.

Zitat:
... Wozu ist die GUID denn noch nötig?
Die habe ich nur eingefügt um dein Programm eindeutig zu identifizieren. Wenn Du nur den Namen der Exe nimmst könnte ja ein anderes Programm genau das selbe machen und die beiden würden sich, obwohl sie nichts mit einander zu tun haben, gegenseitig ausschliessen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#6

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 09:35
Es war aber eine Datei aus dem gleichen Verzeichnis, welche sich auch 2 mal aufrufen ließe.
Jemand ne Ahnung warum ?
Das mit der GUID ist logisch, aber ich könnte genau so gut einen anderen eindeutigen String nehmen oder?
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#7

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 09:41
Moin...

ich hab das folgendermassen realisiert :

Delphi-Quellcode:
initialization
   mHandle := CreateMutex(nil, true, 'meinprogramm');
   if (GetLastError = Error_Already_Exists) then halt;

finalization
   if mHandle <> 0 then CloseHandle(mHandle);
und halt oben noch mhandle als thandle deklariert.

Das wars bei mir soweit und geht.

MFG


Carsten
Carsten
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 09:43
Zitat von meisteralex:
Es war aber eine Datei aus dem gleichen Verzeichnis, welche sich auch 2 mal aufrufen ließe.
Schreib doch mal bitte deinen genauen Code hin.
Du willst ja dass 2 verschieden namige Echsen auch starten dürfen.
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#9

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 09:54
Delphi-Quellcode:
unit mulex;

interface

implementation

uses windows,Dialogs,sysutils;

var mHandle: THandle;

Initialization
  mHandle := CreateMutex(nil,True,paramstr(0));
  // 'xxxxx' Der Anwendungsname ist hier einzutragen
  if GetLastError = ERROR_ALREADY_EXISTS then begin
    // Anwendung läuft bereits
    showMessage('Anwendung läuft bereits!!!!!');
   
    Halt;
  end;

finalization
  if mHandle <> 0 then
    CloseHandle(mHandle)
end. {Dieter Hirt}
So das ist mein Code und trotzdem lässt sich eine EXE in meinem falle ist das (C:\hey.exe) 2x starten, bziehungsweise beliebig oft starten
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 09:56
Hmm... das ist ja seltsam.

Wenn man den Code aus der Code-Library nimmt und als "String" ParamStr(0) verwendet funktioniert es nicht.

Delphi-Quellcode:
  mString := ParamStr(0); // So geht es nicht
  mHandle := CreateMutex(nil, True, PAnsiChar(mString));

  mString := 'blubber'; // so geht es
  mHandle := CreateMutex(nil, True, PAnsiChar(mString));
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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 16:31 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