AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Doppelten Start eines Programmes verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelten Start eines Programmes verhindern

Ein Thema von Andidreas · begonnen am 25. Okt 2006 · letzter Beitrag vom 11. Feb 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 16:59
hi,

ich entwickle gerade eine applikation bei der ich nicht möchte das sie an einem rechner mehrmals gestartet werden kann...

hier im forum hab ich folgende unit gefunden

Delphi-Quellcode:
unit NichtDoppeltStarten;

interface

implementation

uses windows,Dialogs,sysutils;

var mHandle: THandle; // Mutexhandle

Initialization
  mHandle := CreateMutex(nil,True,'xxxxx');
  // 'xxxxx' Der Anwendungsname ist hier einzutragen
  if GetLastError = ERROR_ALREADY_EXISTS then begin
    // Anwendung läuft bereits
    {showMessage('Anwendung läuft bereits!!!!!');}    
    // Wenn du deine Meldung willst, mach die Klammern weg
    Halt;
  end;

finalization // ... und Schluß
  if mHandle <> 0 then
    CloseHandle(mHandle)
end. {Dieter Hirt}
so etwas ähnliches möchte ich jetzt auch in meinem programm einbinden...
und zwar soll die abfrage ob das programm schon läuft so früh wie möglich erfolgen!!!

an welcher stelle muss ich da dann die abfragen einbauen??? im oncreate ereigniss meiner hauptform??? oder gehts noch früher???
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 17:01
Steht doch da: ShowMessage(...), istnur auskommentiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#3

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 17:04
hi Andidreas,

pack deinen Quellcode in deine Projekt-Datei (*.dpr), noch bevor TMainForm (dein Hauptformular) erstellt wird...
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#4

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 18:47
Zitat von Andidreas:
an welcher stelle muss ich da dann die abfragen einbauen??? im oncreate ereigniss meiner hauptform??? oder gehts noch früher???
Du musst das Coding in eine neue Unit speichern und diese Unit in Dein Projekt einbinden. Dadurch wird ein uses-Eintrag in der .dpr-Datei automatisch erzeugt. Wenn Dein Programm initialisiert wird, werden die Units des Projektes nacheinander durchlaufen und zwar werden dabei die Initialization-Abschnitte aller Units (so vorhanden) ausgeführt. In Deinem Fall kommt die Ausführung also in der Mutex-Unit unit NichtDoppeltStarten; vorbei und durchläuft das Coding
Delphi-Quellcode:
Initialization
  mHandle := CreateMutex(nil,True,'xxxxx');
  // 'xxxxx' Der Anwendungsname ist hier einzutragen
  if GetLastError = ERROR_ALREADY_EXISTS then begin
    // Anwendung läuft bereits
    {showMessage('Anwendung läuft bereits!!!!!');}   
    // Wenn du deine Meldung willst, mach die Klammern weg
    Halt;
  end;
automatisch. Das Halt; sorgt dafür, das der Rest nicht mehr ausgeführt wird. Damit brauchst Du das Coding nirgendwo sonst aufzurufen (OnCreate o.ä.).

Bitte noch das 'xxxxx' anpassen in einem möglichst unique-Namen Deines Programmes.

Gruß,
Christoph
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 19:08
Wäre es nicht besser, beim 2. Startversuch des Programmes zu dem bereits gestarteten zurückzukehren ? Genau an die Stelle, wo man in der ersten Instanz auch war ? Ich benutze dafür z.B. eine Semaphore und darüber ist hier genügend zu lesen.

P.S.: mir gefällt die Holzhammermethode mit dem halt; nicht! Das geht auch anders.
Gruß
Hansa
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#6

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 19:18
Hallo,

Du könntest über Hier im Forum suchenProgramm einmal starten Hinweise bekommen.

Ich bilde mir ein, dass ich hier ein Beispiel dazu geschrieben habe, finde es aber nicht. Eine gleichartige Lösung, die sehr gut ist, findest Du hier: only_one.pas, nur 1 Instanz.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#7

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 20:07
Zitat von Hansa:
P.S.: mir gefällt die Holzhammermethode mit dem halt; nicht! Das geht auch anders.
Deinen 1. Punkt habe ich verstanden.

Was aber gefällt Dir an dem Halt; nicht?

Gruß,
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 21:04
Ich kenne mich da jetzt nicht 100%ig aus, aber es sollte doch auch ohne "Halt;" laufen indem du einfach überprüfst, OB es die 1. Instanz ist?

Delphi-Quellcode:
begin
  if firstInstanz then begin
    ...
    Application.CreateForm(...);
    ...
    Application.Run;
    ...
  end;
end;
[delphi]-Tags vergessen
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#9

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 21:07
Zitat von xZise:
  if firstInstanz then begin
wer oder was ist "firstInstanz"?

Gruß,
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 21:37
Eine Funktion die einen Boolean zurückgibt:
Delphi-Quellcode:
function firstInstanz : Boolean;
begin
  // Überprüfen, ob dies die 1. Instanz ist, oder eine weitere...
end;
Ich habe mich nicht damit auseinandergesetzt... Deshalb kann es sein, dass es so nicht geht, aber wenn es so geht, dann kann man so ein Halt; / Application.Terminate; umgehen!

Nicht getestet:
Delphi-Quellcode:
program Project1;

uses
 Forms,
 Unit1 in 'Unit1.pas{Form1};

{$R *.RES}

var
  mHandle : THandle;

begin
  
  mHandle := CreateMutex(Nil, True, 'TForm1');

  if GetLastError <> ERROR_ALREADY_EXISTS then begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;

  if mHandle <> 0 then
   CloseHandle(mHandle);
end.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 04:43 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