![]() |
Problem mit LoadPackage
Dieses Problem bezieht sich auf Delphi 7.
Hallo, ich habe folgendes Problem: Wenn Delphi gestartet wird und nicht alle eingebundenen Package vorhanden sind, gibts eine Fehlermeldung ('Package xyz.bpl konnte nicht geladen werden'). Wenn ich nun delphi32.exe beende (den Prozess kille), bleibt die Fehlermeldung auf dem Bildschirm stehen. Die Fehlermeldung gehört nicht delphi32.exe, sondern dem Prozess "csrss.exe". Bei einem neuen Delphi Start kommt es gar nicht erst zu einer Meldung, es wird erst gewartet, bis diese Meldung weg geklickt wurde. Meine Frage ist nun: Wie bekomme ich diese Fehlermeldung weg, ohne den Task csrss.exe zu killen. Damit es nicht so einfach ist, das Ganze läuft nicht im Benutzermodus, sondern als Dienst. -> Es ist also kein Benutzer angemeldet der das Fenster sehen würde. Zum Testen habe ich 2 kleine Package und ein Testprogramm geschrieben. - Package2.bpl benötigt das Package1.bpl zum starten. - Project1.exe läd mit LoadPackage('Package2.bpl') das Package -> Fehlermeldung - Project1.exe kann nun mit Taskmanager beendet werden (Prozess beenden) -> Die FGehlermeldung bleibt stehen. Anmerkung: Was mich wundert ist, dass in der SysUtils.LoadPackage ein
Delphi-Quellcode:
aufgerufen wird. Dieses raise erzeugt das Fenster, das nicht mehr Delphi gehört. Ein
...
raise EPackageError.CreateResFmt(@sErrorLoadingPackage, [Name, {$IFDEF MSWINDOWS}SysErrorMessage(GetLastError){$ENDIF} {$IFDEF LINUX}DLErrorMsg{$ENDIF}]); ...
Delphi-Quellcode:
bringt eine Fehlermeldung, die aber mit dem Killen des Project1.exe Prozeses weg ist. :gruebel:
raise Exception.Create('Test');
Für Eure Hilfe bedanke ich mich schon mal im Voraus ;) |
Re: Problem mit LoadPackage
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Problem mit LoadPackage
Zitat:
Zitat:
- ProzessId des CSRSS besorgen (ToolHelp32) - Fenster global durchgehen (gute Filterkreterien) - blödes Ding per Fensternachricht verschwinden lassen... Der CSRSS hat eine Queue solcher Nachrichten (kennt man vom 'Nachrichtendienst', die kommen jeweils erst nach dem Wegklicken). |
Re: Problem mit LoadPackage
Ich habe noch etwas interesanntes herausgefunden:
Im Taskmanager -> Prozesse -> Prozess beenden -> Fehlerdialog bleibt da (gehört csrss.exe) aber im Taskmanager -> Anwendungen -> Task beenden -> Fehlerdialog ist weg. Wo liegt da der Unterschied, wie kann ich das aus Delphi (oder Perl) machen? |
Re: Problem mit LoadPackage
Zitat:
Wild guess: TerminateProcess versus WM_CLOSE (CSRSS bekommt wahrscheinlich nur beim 'sauberen' beenden das Ereignis mit). |
Re: Problem mit LoadPackage
Zitat:
Es gibt eine relativ einfache Lösung, da der Fenstertitel bekannt ist: (hier gefunden: ![]()
Delphi-Quellcode:
@NicoDE: Danke für den Schupps in die richtige Richtung ;)
// schließt alle Fenster mit dem Titel 'delphi...'
procedure TForm1.Button2Click(Sender: TObject); var aHandle: HWnd; begin aHandle := FindWindow(nil, 'delphi32.exe - Komponente nicht gefunden'); while aHandle <> 0 do begin SendMessage(aHandle, WM_CLOSE, 0, 0); aHandle := FindWindow(nil, 'delphi32.exe - Komponente nicht gefunden'); end; end; // bzw: wenn nur ein Fenster geschlossen werden soll procedure TForm1.Button2Click(Sender: TObject); var aHandle: HWnd; begin aHandle := FindWindow(nil, 'delphi32.exe - Komponente nicht gefunden'); if aHandle <> 0 do begin SendMessage(aHandle, WM_CLOSE, 0, 0); end; end; //Beide Funktionen sind in der user32.dll enthalten: function FindWindow; external user32 name 'FindWindowA'; function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall; function SendMessage; external user32 name 'SendMessageA'; function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; function PostMessage; external user32 name 'PostMessageA'; function PostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall; |
Re: Problem mit LoadPackage
Zitat:
Viel Spass mit Delphi-Hacking :) |
Re: Problem mit LoadPackage
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz