Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#29

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll

  Alt 18. Feb 2010, 12:44
Auch wenn dieses Thema ein wenig abgedriftet ist, da der Fehler nicht eindeutig benennbar ist, führe ich es mal mit aktuellen Informationen fort:

Mittlerweile tritt diese ntdll.dll Fehler auch ohne die UPX-Komprimierung unter Windows 7 auf. Ich habe jetzt einen Laptop mit Windows 7 Pro und habe dort mein Delphi mit allem drum und dran zum Laufen bekommen. Jetzt wird es interessant:

Wenn ich das Projekt ganz normal mit F9 starte, klappt zunächst alles. Wenn ich nun eine beliebige Änderung am Quelltext vornehme (z.B. x := 0; y := 0; ersetzen durch y := 0; x := 0) dann kommt bei allen nachfolgenden Starts mit F9 (oder auch ohne Debugger direkt mit der .exe) die o.g. Fehlermeldung mit der .dll Datei.

Wenn ich nun ein Leerzeichen einfüge (als den Quelltext geringfügig verändere) und dann wieder mit F9 starte, kommt die Fehlermeldung nicht mehr. Wunder der Technik. Zumindest bis zur nächsten Änderung, wo mehr als ein Leerzeichen geändert wird; dann kommt beim Programmstart wieder die Fehlermeldung.

Kurz zusammengefasst: Die Fehlermeldung mit der ntdll.dll erscheint, wenn das Projekt (manche/alle Units) komplett neu compiliert wurde. Solange, bis es danach nochmal kompiliert wird.

Das ergibt für mich keinen Sinn.

Ich habe bei _allen_ Units, die mein Programm verwendet (oder verwenden könnte) in der ersten Zeile nach "initialization" (sofern vorhanden) einen Haltepunkt gesetzt, falls dieser Abschnitt eine Exception verursacht. Da initialization immer vor der ersten Zeile des Projekts ausgeführt wird (Application.Initialize; <-- hat auch einen Haltepunkt von mir bekommen), könnten ja auch die eingebundenen Units das Problem sein. Sind Sie aber scheinbar nicht, denn die Fehlermeldung kommt immernoch _bevor_ die erste Zeile von initialization bei irgendeiner Unit aufgerufen wird.

Könnte Windows 7 selbst das Problem verursachen?
Hm, ich habe 2 (eigene) DLL-Dateien in meinem Programm eingebunden wie z.B.
function File_IsAccessDB(FileName: string): Boolean; external 'datenbank.dll'; Prüft die .exe beim Programmstart vor initialization vielleicht, ob die angegebenen .dll Dateien vorhanden sind und die Funktionen/Prozeduren exportieren, die ich verwende?

Oder: Wenn die .exe erstellt ist, kann es sein, dass sie vom Virenscanner, Windows IndexDienst oder einem anderen Programm so gesperrt wird, dass die nicht korrekt ausgeführt werden kann? (Auch mit deaktiviertem AntiVir klappt es nicht.)

Zum Thema Manifest: Ich habe wir in http://www.delphipraxis.net/internal...nifest+windows und http://www.delphi-treff.de/tutorials/vcl/vista/ beschrieben "Laufzeit-Themes" aktiviert. D.h. angeblich ist in meine .exe automatisch ein Manifest für Vista / Windows 7 enthalten. Stimmt das, oder brauche ich noch extra Modifikationen.

Wie bekomme ich meine .exe dazu, unter Win7 immer als Administrator zu starten (Bitte die Fragen, wie "sinnvoll" dies ist, zurückstellen. Danke.) Ich werde dazu gleich mal die SuFu anwerfen, falls wer spontan nen Tip hat, bitte sagen
  Mit Zitat antworten Zitat