AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Programm startet nicht: "Invalid data"
Thema durchsuchen
Ansicht
Themen-Optionen

Programm startet nicht: "Invalid data"

Ein Thema von BlueStarHH · begonnen am 3. Apr 2014 · letzter Beitrag vom 3. Apr 2014
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#1

Programm startet nicht: "Invalid data"

  Alt 3. Apr 2014, 09:26
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!

Geändert von BlueStarHH ( 3. Apr 2014 um 09:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Programm startet nicht: "Invalid data"

  Alt 3. Apr 2014, 09:46
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 ShowMessage() oder MessageBox() Aufrufen präparieren.
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: http://www.delphipraxis.net/210739-post10.html
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Programm startet nicht: "Invalid data"

  Alt 3. Apr 2014, 09:47
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: Programm startet nicht: "Invalid data"

  Alt 3. Apr 2014, 10:07
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:

constructor Create(AOwner: TComponent); override;
Delphi-Quellcode:
constructor TForm1.Create(AOwner: TComponent);
begin
  try
    inherited;
  except
    if not HandleCreateException then
      raise;
  end;
end;
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.

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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:05 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