Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll (https://www.delphipraxis.net/143322-exe-dateien-kleiner-upx-windows-7-problem-ntdll-dll.html)

Progman 13. Nov 2009 15:16

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll
 
Kleine Anmerkung:
Die erste Zeile im NSIS-Script sollte "RequestExecutionLevel admin" sein.
Jedenfalls hat das unter Vista Wirkung und unter Win7 stört es zumindest nicht. Unsere Installationen funktionieren jedenfalls bisher.

berens 13. Nov 2009 15:25

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll
 
Wie befürchtet löst "RequestExecutionLevel admin" zwar das Problem (Fehlermeldung ist weg, Danke Progman!), aber nicht die Ursache.

Irgendeine Idee wie ich das Problem "reproduzierbar" machen kann, so dass es auch auftritt, wenn ich es mit eingeschalteter UAC als normaler Benutzer ohne Adminrechte ausführe?

OldGrumpy 13. Nov 2009 16:19

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll
 
Mit einem Tool wie madExcept kannst Du Dir zumindest den Callstack sichern und das ganze eingrenzen. Wenn das noch nicht hilft, kannst Du mittels der Win32-API OutputDebugString in den einzelnen Initialization-Abschnitten zumindest abklären was noch initialisiert wird bevor es rummst.

berens 13. Nov 2009 16:46

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll
 
Ich verwende bereits Eurekalog, aber das konnte mir bei diesem Problem leider auch nicht helfen :(

himitsu 13. Nov 2009 17:31

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll
 
Wenn das mit dem Debuggen daran hapert, daß es schneller knallt, als du verbinden kannst,
dann bau dir 'ne Verzögerung ein, damit du die Zeit bekommst.

erstell dir eine Unit, schreib da z.B. ein Sleep rein und füge diese Unit als aller Erste in die Usesliste des Projektes (.DPR) ein.

generic 13. Nov 2009 18:25

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll
 
Welches Manifest tust du an dein Programm dran?

OldGrumpy 19. Nov 2009 12:21

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll
 
Mich hätte mal interessiert, ob es da nun eine "richtige" Lösung gegeben hat :) *push*

berens 19. Nov 2009 12:27

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll
 
Sry, komplett vergessen gehabt noch ne Antwort zu schreiben, weil ich die letzten Tage viel unterwegs war.

Als Manifest verändere ich nichts, was mir Delphi 2007 mitliefert. Ist halt die Frage, ob ich da noch konkret was ändern muss (auf Dauer).

Zitat:

Wenn das mit dem Debuggen daran hapert, daß es schneller knallt, als du verbinden kannst,
dann bau dir 'ne Verzögerung ein, damit du die Zeit bekommst.

erstell dir eine Unit, schreib da z.B. ein Sleep rein und füge diese Unit als aller Erste in die Usesliste des Projektes (.DPR) ein.
Muss ich demnächst mal ausprobieren, leider aktuell kein Windows 7 PC zu testen da.

Das Problem ist nun vorläufig so "gelöst", dass ich im NSIS Script tatsächlich "RequestExecutionLevel admin" verwende (Danke Progman), seitdem funktioniert es.

Mir ist schon klar, dass das Problem irgendwie mit Benutzerrechten und der UAC zusammenhängt, leider konnte ich aber noch nicht herausfinden, woran genau, da sich das Problem ja wie gesagt nicht nachvollziehen lässt außer direkt im Anschluss an den Installer. Auch Ausführung als Gast-Benutzer macht keine Probleme.

berens 18. Feb 2010 12:44

Re: .exe Dateien kleiner / UPX-Windows-7 Problem / ntdll.dll
 
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.
Delphi-Quellcode:
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 ;)

Sherlock 18. Feb 2010 13:05

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

Zitat von berens
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 ;)

Ins Manifest schreiben, daß sie mit Adminrechten gestartet werden soll.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr.
Seite 3 von 4     123 4      

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