![]() |
Alternative für MapAndLoad
In der JCL (TJclPeImage) wird beim Laden die WinAPI MapAndLoad verwendet.
Unglücklicherweise verwendet diese AnsiStrings statt Unicodestrings. Kombiniert damit das nich überalle 8.3-Dateinamen mehr existieren schlägt damit die Prüfung ob eine Exe-Datei 64-Bit ist fehlt (LoadedImage.FileHeader^.FileHeader.Machine aus dem TJclPeImage). Was wäre die alternative festzustellen ob eine Exe 64 Bit ist? Ich würde das eigentlich benötigen ohne das ich dise Exe Starte? |
AW: Alternative für MapAndLoad
Zitat:
![]() z.B. IMAGE_FILE_MACHINE_AMD64 und IMAGE_FILE_MACHINE_IA64 |
AW: Alternative für MapAndLoad
Also bei mir funktioniert folgende Funktion seit vielen Jahren einwandfrei, auch unter Win64 und für 64-bit Executables:
Delphi-Quellcode:
Ich gebe zu, dass es auch etwas problematisch sein dürfte mit Unicode-Zeichen im Pfad, aber bislang hab ich keine andere Möglichkeit gefunden (aber in den vergangenen paar Jahren auch nicht mehr danach gesucht).
function GetExecutableArchitecture(const AFileName: string): Word;
var LI: TLoadedImage; begin if NOT MapAndLoad(PAnsiChar(AnsiString(AFileName)), nil, @LI, False, True) then RaiseLastOsError; Result := LI.FileHeader.FileHeader.Machine; UnMapAndLoad(@LI); end; Grüße Dalai |
AW: Alternative für MapAndLoad
Zitat:
Und auch ein GetShortPathName funktioniert nicht, wenn für E:\ diese Logik der kurzen Dateinnamen nicht aktiv ist. |
AW: Alternative für MapAndLoad
Oder die Datei nach TEMP kopieren und dort MappenUndLaden :stupid:
|
AW: Alternative für MapAndLoad
Zitat:
![]() Also 1, Suche "PE" in der Datei 2, Überspringe die beiden Null-Zeichen (\0\0) 3, Wenn jetzt d† kommt ($64 $86) kommt dann hat man AMD64 |
AW: Alternative für MapAndLoad
Zitat:
Hatte ich mir auch schon überlegt. Wenn dann noch Netzwerk oder VPN dazu kommt hat man gleich ein SAP erschaffen ... |
AW: Alternative für MapAndLoad
Hey, die sind das Nonplusultra .... jeder will so sein wie die. :stupid:
Pssst, wenn MapAndLoad bissl Fehlertollerant ist, dann reicht es ja das erste KB/MB zu kopieren. Du brauchst ja nur die zwei/drei Header am Anfang. Das sind zwei Records. Im Ersten ab Adresse 0 steht drin, wo der Andere anfängt und dort drin findeste dann das interessante Byte/Feld. An Position X steht der Offset zum Zweiten, dort noch bissl was drauf rechnen (im zweiten Record) und djeses Byte dann auslesen. |
AW: Alternative für MapAndLoad
Zitat:
Ich denke damit kann ich die nächsten 3-5 Jahre überbrücken, bis 32-Bit auch für uns komplett gestorben ist. |
AW: Alternative für MapAndLoad
Zitat:
Zitat:
Zitat:
Grüße Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 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 by Thomas Breitkreuz