![]() |
Programm startet nicht: "Invalid data"
Ein Kunde hat ein Multibootsystem: Zwei mal Windows 8 x64 auf der selben SSD. Startet er die erste Windows-Installation, läuft mein Programm normal. Startet er hingegen die zweite Windows-Installation erscheint direkt beim Start meines Programms die Meldung "Invalid data." und danach "Zugriffsverletzung bei Adresse 006E5027 in Modul 'XYZ.exe'. Lesen von Adresse 00000000." Das Hauptfenster wird nicht sichtbar, aber der Programm verbleibt im Arbeitsspeicher. Zu sehen im Taskmanager in der Liste der Hintergrundprozesse.
Die zweite Windows-Installation ist Clone der ersten Installation der mit Acronis TrueImage erstellt wurde. Alle anderen Programme laufen ohne Probleme. Mein Programm braucht keine Installation oder bestimmte Dinge. Es ist eine ganz normale mit Delphi erstelle EXE mit einem Hauptfenster (kein "Hintergrundprozess"). Was kann das sein? Wer kann helfen? Danke! |
AW: Programm startet nicht: "Invalid data"
Du bräuchtest einen Stacktrace damit du die Exception genau lokalisieren kannst.
Dazu kannst du z.B. MadExept oder die Jedi Code Library (open source) verwenden. Im Unterverz. examples der JCL gibt es dazu ein Beispiel wie man den Stacktrace anzeigen kann. Zunächst einmal würde ich die Projektdatei mit
Delphi-Quellcode:
oder
ShowMessage()
Delphi-Quellcode:
Aufrufen präparieren.
MessageBox()
Also zwischen jede Anweisung in der Projektdatei eine Meldung setzen damit du weisst wo du suchen musst. Könnte auch sein, dass die Exception schon erzeugt wird, bevor die Anweisungen in der Projektdatei überhaupt abgearbeitet wurden. Dann müsste man die Initialization-Abschnitte in allen Units insbesondere von nicht-Standard Komponenten anschauen. Weitere Tipps findest du hier: ![]() |
AW: Programm startet nicht: "Invalid data"
Du solltest erst einmal prüfen, ob im Konstruktor des Formulars mehr ausgeführt wird als das reine Initialisieren von Variablen. Manchmal wird der Fehler gemacht dort z.B. schon Netzwerkverbindungen oder ähnliches zu öffnen.
In dem Fall sollte zumindest ein try..except mit einer Fehlerausgabe oder -behandlung drum sein. Und dann gibt es noch Tools wie madexcept oder Eurekalog, die dir die Fehlerstelle liefern können. |
AW: Programm startet nicht: "Invalid data"
Mann kann natürlich auch klein anfangen und mit ein paar Try-excepts seinen Startcode absichern, bzw. mit einer netten "Positionsangabe" die Exception-Message erweitern.
Entweder den Startcode ins OnCreate, wie es viele machen, aber wenn auf der Form schon Datenkomponenten sind, welche beim Start schon was machen, dann:
Delphi-Quellcode:
constructor Create(AOwner: TComponent); override;
Delphi-Quellcode:
PS: Ungefähr so ist auch das OnCreate abgesichert (seit, ich weiß nicht wann), so daß selbst bei einer Exception im OnCreate die Form nicht komplett verreckt.
constructor TForm1.Create(AOwner: TComponent);
begin try inherited; except if not HandleCreateException then raise; end; end; Wobei es hier dennoch nicht schlecht gewesen wäre, wenn man dem Handle Exception noch die adresse mitgegeben hätte.
Delphi-Quellcode:
constructor TForm1.Create(AOwner: TComponent);
begin try inherited; except on E: Exception do begin //E.Message := Self.SecureClassName + '(' + Self.SecureName + '): ' + E.Message; // ich hab mir via Class-Helper da bein paar geschützte Property geschaffen, da sie öfters verwendet werden, welche auch mit nil und ungültigen Zeigern zurechtkommen try E.Message := Self.ClassName + '(' + Self.Name + '): ' + E.Message; except E.Message := 'TForm.Create: ' + E.Message; end; if not HandleCreateException then raise; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 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