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 2 von 3     12 3      
Hansa

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

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 21:43
Zitat von pertzschc:
Was aber gefällt Dir an dem Halt; nicht?
Ganz einfach : beim Programmstart wird eventuell eine Menge initialisiert, Dateien geöffnet usw. Und Du gehst jetzt hin und sagst lapidar : egal, nach mir die Sintflut.
Gruß
Hansa
  Mit Zitat antworten Zitat
pertzschc

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

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 21:43
Zitat von xZise:
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!
Nochmal die Frage an Dich: Was ist so schlimm an einem Halt; bzw. was genau spricht an Argumenten gegen eine Benutzung?
Das Halt kommt ja noch vor einem Application.Initialize; (bei einer VCL-Anwendung)...

Gruß,
Christoph
  Mit Zitat antworten Zitat
pertzschc

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

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 21:45
Zitat von Hansa:
Ganz einfach : beim Programmstart wird eventuell eine Menge initialisiert, Dateien geöffnet usw.
Meinst Du Dinge innerhalb der Delphi-Anwendung, sprich Forms per Autocreate oder Datamodule oder meinst Du Dinge, die Windows automatisch macht, worauf man im Code der Anwendung keinen Einfluss hat?

Wenn zweiteres, bitte erläutere doch mal genauer, was genau man da Windows zerschiessen könnte mit einem Halt?

Danke+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
 
#14

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 21:54
Zitat von pertzschc:
Zitat von xZise:
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!
Nochmal die Frage an Dich: Was ist so schlimm an einem Halt; bzw. was genau spricht an Argumenten gegen eine Benutzung?
Das Halt kommt ja noch vor einem Application.Initialize; (bei einer VCL-Anwendung)...

Gruß,
Christoph
Sorry, aber ich habe nur einen Weg präsentiert, indem man das umgeht, und nie etwas direkt dazu gesagt...

Zitat von Hansa:
P.S.: mir gefällt die Holzhammermethode mit dem halt; nicht! Das geht auch anders.
Aber wo wir gerade dabei sind ...
Mit "break;", "exit;" und "halt;" mancht man den Code schön unstrukiert...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Hansa

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

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 22:00
Mir ist es gelungen, die Kausalität ausser Kraft zu setzen und das am roten Kasten vorbei (Antwort vor Frage). Wie immer ist mein Ansatz der, Fehler zu vermeiden und nicht erst danach einzugreifen. Im konkreten Fall würde ich einfach eine Semaphore einsetzen. Versucht jemand das Programm nochmals zu starten, dann landet er genau da, wo er vorher auch war. Der Tip mit Mutex läuft ähnlich und ist wohl durch Internet mehr verbreitet worden, aber irgendwo gibt es einen wichtigen negativen Unterschied. Frag mich aber jetzt nicht, wo genau. Da die Semaphoren einwandfrei gehen, ist mir das auch egal. 8)

Uff, jetzt schlägt der Kasten doch zu. Es gibt 1000 Möglichkeiten seinen Source unstrukturiert zu machen. HALT gehört sicherlich dazu.
Gruß
Hansa
  Mit Zitat antworten Zitat
Hansa

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

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 22:06
Sagen wirs mal so : wird das Programm beendet, dann ist der Speicher immer noch da. Angenommen, Du schreibst in Word einen Text und beim Rechner wird plötzlich Stecker gezogen. Was ist nun mit dem Text ? Ist der vielleicht sogar unrettbar weg ?
Gruß
Hansa
  Mit Zitat antworten Zitat
pertzschc

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

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 22:13
Zitat von Hansa:
Sagen wirs mal so : wird das Programm beendet, dann ist der Speicher immer noch da. Angenommen, Du schreibst in Word einen Text und beim Rechner wird plötzlich Stecker gezogen. Was ist nun mit dem Text ? Ist der vielleicht sogar unrettbar weg ?
Den Vergleich verstehe ich nicht.

Es ging mir um folgende konkrekte Frage:
Eine Instanz eines Programmes läuft im Windows und erfreut sich bester Gesundheit.
Jetzt startet der User eine 2. Instanz des Programmes.

Wenn ich dabei das Mutex-Prinzip umsetze und z.B. in einer separaten Unit in das Projekt
einbinde, dann wir das Programm beendet zwischen begin und Application.Initialize; - also
bevor der Code zum initialisieren greift:
Delphi-Quellcode:
{$R *.res}
...
begin
// hier wird der Ablauf schon unterbrochen!!
  Application.Initialize;
  Application.Title := 'xxx';
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.
Okay ich gebe zu, das Initialization-Blöcke in anderen Units auch schon ausgeführt werden.
Aber nun nochmal ganz genau: Welchen Nebeneffekt hat ein Halt; zu diesem Zeitpunkt des Programmstarts? Was kann z.B. Windows nicht tun, was es normalerweise tun muss, um den Prozess korrekt zu beenden?

Gruß,
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Doppelten Start eines Programmes verhindern

  Alt 25. Okt 2006, 22:52
Es könnten z.B. schon Dateihandles offen sein. Wenn die nicht mehr freigegeben werden, kreigt sie niemand sonst (naja, kommt aufs Share-flag an)
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Hansa

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

Re: Doppelten Start eines Programmes verhindern

  Alt 26. Okt 2006, 00:36
Nene, so war das nicht gemeint ! Mir ging es darum, ein Programm gar nicht erst zu starten, wenn es schon gestartet ist. 8) Mit Semaphoren geht das. Zumindest hier.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

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

Re: Doppelten Start eines Programmes verhindern

  Alt 26. Okt 2006, 11:07
Zitat von Luckie:
Steht doch da: ShowMessage(...), istnur auskommentiert.
was isn das für ne antwort??? hast du meine frage überhaupt durchgelesen???

naja egal

also ich hab durch denn link von jürgen thomas einen beitrag von turboPASCAL gefunden...
der hat ne beispiel anwendung mal gepostet in der demonstriert wurde wie man ein programm das bereits läuft
und noch mals gestartet wird in den vordergrund holt... funktioniert einwandfrei, auch wenn das programm in
denn tray minmiert wurde (ok es bleibt im tray, aber es wird nicht 2 mal gestartet wie zuvor)

ich hab jetzt nur noch ein kleines problem mit dem text in der taskleiste... denn muss ich in der .dpr datei
festhinterlegen, würde dies aber gerne variable machen!

Delphi-Quellcode:
program DPStart;

uses
  Forms,
  Windows,
  DPStart_main in 'DPStart_main.pas{Main_Form};

{$R *.res}

var
FirstInstance : hWnd;

begin

  FirstInstance := FindWindow('TApplication', 'hier muss ich denn text reinschreiben'); // <-- die stelle hätte ich gern variabel!!!
  If FirstInstance <> 0 Then
  Begin
    If IsIconic(FirstInstance) Then ShowWindow(FirstInstance, SW_RESTORE)
  Else
    SetForeGroundWindow(FirstInstance);
    FlashWindow(FirstInstance, True);
  End Else
  Begin
    Application.Title := 'hier muss ich denn text reinschreiben';´// <-- und diese auch
    Application.CreateForm(TMain_Form, Main_Form);
    Application.Run;
  End;

end.
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:29 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