![]() |
Größe der eignenen Exe-Datei erfahren
Hallo zusammen,
Ja der Titel sagt ja schon fast alles ich möchte die Größe der laufenden Anwendung bekommen. ALLERDINGS nicht mittlels Filesize() da ich nämlich Daten an die Exe angehängt habe. Gibt es nun eine Möglichkeit die Dateigröße aus dem Exe-Header zu lesen, oder sie auf eine andere Art zu ermitteln? danke für alle Beiträge im Voraus :D mfg Phreax |
Re: Größe der eignenen Exe-Datei erfahren
Du willst also die Größe des kompilierten Codes haben?
|
Re: Größe der eignenen Exe-Datei erfahren
Hey :hi:
Wenn ich das richtig einschätze willst du die Länge der angehängten Daten ermitteln? Das kannst du viel einfacher machen wenn du die Länge gleich mit zu den Daten schreibst und dann anhängst, sonst könntest du (falls es sich um eine von dir erstellte datei handelt) die Größe vor dem Kompilieren in die Versionsinfos o.ä. schreiben.. |
Re: Größe der eignenen Exe-Datei erfahren
Na ja, die Größe steht irgendwie in dem EXE-Header mit drin (k.A. wo, aber ich bin mir da recht sicher)
Was aber dein Problem angeht, du könntest dir ja mal Luckie's SFXTools ansehn? (da werden auch Daten an die EXE angehängt) ![]() |
Re: Größe der eignenen Exe-Datei erfahren
Hehe, da habe ich geschummelt und die Größe der Exe hardgecodet. Aber Nico hatte, glaube ich, mal einen Code gepostet dafür.
|
Re: Größe der eignenen Exe-Datei erfahren
Ist ganz simpel, einfach die PointerToRawData von der letzten (oder größten sektion) auslesen und mittels SizeOfRawData zusammenzählen.
Edit:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses Windows; function IntToStr(i: Integer): string; begin Str(i, Result); end; var { Datei Öffnen } hFile: THandle; lpNumberOfBytesRead: DWORD; { Zwischenspeicherung } lpBuffer: Pointer; x: Word; dwTmp, dwSize, dwWinSize: Cardinal; { PE-Stuff } NtHeaders: PImageNtHeaders; Section: PImageSectionHeader; begin dwSize := 0; dwWinSize := 0; hFile := CreateFile(PChar(ParamStr(0)), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if (hFile <> INVALID_HANDLE_VALUE) then begin dwWinSize := GetFileSize(hFile, nil); GetMem(lpBuffer, $800); // nur 2048 Bytes einlesen, mehr sollte nicht benötigt werden. ReadFile(hFile, lpBuffer^, $800, lpNumberOfBytesRead, nil); if (lpBuffer <> nil) then begin NtHeaders := PImageNtHeaders(Cardinal(lpBuffer) + Cardinal(PImageDosHeader(lpBuffer)._lfanew)); if (NtHeaders^.Signature = IMAGE_NT_SIGNATURE) then begin for x := 0 to NtHeaders^.FileHeader.NumberOfSections -1 do begin Section := PImageSectionHeader(Cardinal(NtHeaders) + SizeOf(TImageNtHeaders) + (SizeOf(TImageSectionHeader) * x)); dwTmp := Section.PointerToRawData + Section.SizeOfRawData; if (dwTmp > dwSize) then dwSize := dwTmp; end; FreeMem(lpBuffer); end; end; end; CloseHandle(hFile); WriteLn('WinFileSize: ' + IntToStr(dwWinSize)); WriteLn('MyFileSize: ' + IntToStr(dwSize)); ReadLn; { TODO -oUser -cConsole Main : Hier Code einfügen } end. |
Re: Größe der eignenen Exe-Datei erfahren
Danke für die superschnelle Hilfe!!! :dp:
@ DErazerZer Code funktioniert wunderbar :D @kill -9 Nein ich wollte ie 3_of_8 sagte die größe des kompilierten codes. Zum Hintergrund, ich war es leid bei jeder Änderung meins Programms (eines Installers) das Projekt zu kompilieren, die Exe Größe zu kopieren im Programm zu setzen und neu zu kompilieren ;) Wenn interesse besteht werde ich ihn in nächster Zeit (wenn er vollends ausgereift ist) hier in der DP veröffentlichen... (aber eigentlich benutzt ja jeder inno-setup :roll: ) Also nochmals danke für die superpromte hilfe an alle! mfg Phreax |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 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