Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Programmprozess läuft weiter, obwohl "Windows"-Kreuz gedrück (https://www.delphipraxis.net/96563-programmprozess-laeuft-weiter-obwohl-windows-kreuz-gedrueck.html)

DeddyH 27. Jul 2007 08:35

Re: Programmprozess läuft weiter, obwohl "Windows"
 
Zitat:

Zitat von litotes
Meine Anwendung hat einen programmierten Ende-Button, der auch tadellos funktioniert.

Dann zeig doch mal den Source, der bei Klick ausgeführt wird.

litotes 27. Jul 2007 08:47

Re: Programmprozess läuft weiter, obwohl "Windows"
 
Hi,

der Ende-Button ist ein simples onClick auf einen Button, mit:
Delphi-Quellcode:
Application.Terminate;
So jedenfalls hat meine Forumssuche ergeben, ist der beste Weg, zu beenden.

gruss

litotes

SirThornberry 27. Jul 2007 08:59

Re: Programmprozess läuft weiter, obwohl "Windows"
 
ein einfaches "Close()" sollte zum schließen genügen.

KesseK 27. Jul 2007 09:00

Re: Programmprozess läuft weiter, obwohl "Windows"
 
Delphi-Quellcode:
Application.Terminate;
Was passiert bei einem simplen close;?

Terminate klingt so brutal, das mag ich persönlich gar nicht.

litotes 27. Jul 2007 09:34

Re: Programmprozess läuft weiter, obwohl "Windows"
 
Hallo,

weiteres Debuggen hat ergeben, dass mein Programm anscheinend an folgender Stelle hängt (nachdem ich Beendet habe per Windows-Kreuz):
im CPU-Fenster sieht man

ntdll.kiFastSystemCallRet


Kann damit jemand was anfangen?


litotes

hoika 27. Jul 2007 09:53

Re: Programmprozess läuft weiter, obwohl "Windows"
 
Hallo,

setz mal einen Breakpoint auf FormDestroy das Hauptforms.


Heiko

litotes 27. Jul 2007 10:25

Re: Programmprozess läuft weiter, obwohl "Windows"
 
Hallo,

@hoika: den Breakpoint habe ich gesetzt, obwohl onDestroy bisher gar nicht existiert hat.
Ich habe also mal label1.caption := 'test'; reingeschrieben.

Beim durchsteppen kommt erst der ganze label caption Kram, und dann landet er,
auch bei anderen Befehlen (also close() statt label.caption) bei dem Mutex-Befehl:

Delphi-Quellcode:
const
  MutexName = 'Helfomat';
  //-->der Name, unter dem Windows dein Programm anspricht
 var
  hMutex: THandle;
begin
  hMutex := CreateMutex(NIL, True, MutexName);
  //-->Versuch, dem Programm den obigen Mutex zuzuweisen
  if (hMutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then
  begin
    CloseHandle(hMutex);
    halt;
  end;

  Application.Initialize;
  Application.CreateForm(TF_Navigation_705_Abfrage, F_Navigation_705_Abfrage);
  Application.CreateForm(TF_Hier_Starten, F_Hier_Starten);
  Application.CreateForm(TF_SM, F_SM);
  Application.Run;
  CloseHandle(hMutex);
Dieser Code steht bei meiner "program"-datei, also der "Programmname.dpr".

Merkwürdigerweise läuft der Prozess auch nur weiter, nachdem ich ins
zweite Formular gewechselt bin. Wenn ich nur Form1 aufmache, ist alles ok.

Noch jemand ne gute Idee?

litotes

litotes 27. Jul 2007 13:38

Re: Programmprozess läuft weiter, obwohl "Windows"
 
Hallo,

ich hab den Fehler noch ein wenig weiter eingeengt.

Mein Hauptformular lässt sich schließen, und der Prozess wird sauber beendet.

Der Fehler (Prozess läuft weiter) tritt nach dem Wechsel zum 2. Formular auf.

Und es ist völlig egal, ob ich ein völlig leeres Formular aufrufe, und wie ich es
aufrufe (über create dynamisch zur Laufzeit, oder gleich zu Beginn immer vorhanden).

Es kann also IMHO nicht an dem liegen, was im 2. Formular aufgerufen wird, oder?

/edit: Ein letzter verzweifelter Test hat ergeben, dass ein völlig neues Projekt (!), das
nur aus 2 leeren Form1 und Form2 mit einem Button dazwischen und hide; Form2.show besteht,
denselben Fehler zeigt. Kann das jemand mal auf seinem Computer nachvollziehen?
Sprich, auf Form2 wechseln, über das Kreuz schließen und prüfen, ob der Prozess noch läuft?

Ich werde immer ratloser...

litotes

shadowman 9. Okt 2010 10:47

AW: Programmprozess läuft weiter, obwohl "Windows"-Kreuz gedrück
 
Hallo,

es ist schon viel zeit vergangen seit dem letzten Post hier, aber eine Lösung war nicht dabei, wie es aussieht, und da ich ein ähnliches Problem habe, dachte ich, ich poste mal hier.

Bei mir sieht es folgendermaßen aus:
- Eine mit Delphi 2007 erstellte Anwendung
- Auf Betriebssystemen außer Windows 7 scheint alles zu funktionieren
- Auf Windows 7 auch, aber nur solange kein Fehler während der Laufzeit auftritt. Passiert dies, z.B. eine Zugriffsverletzung, bleibt der Prozess nach dem Beeden in der Prozessliste und muss manuell beendet werden. Ohne Fehler geht es.

Gibt es irgendwelche neuen Erkenntnisse, ähnliche Erfahrungen oder Ideen in dem Zusammenhang?

Schöne Grüße,
"shadowman"

Luckie 9. Okt 2010 10:53

AW: Programmprozess läuft weiter, obwohl "Windows"-Kreuz gedrück
 
Dann behandle den Fehler (Exception), wenn er sich nicht vermeiden lässt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.
Seite 2 von 3     12 3      

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