AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Größe der eignenen Exe-Datei erfahren
Thema durchsuchen
Ansicht
Themen-Optionen

Größe der eignenen Exe-Datei erfahren

Ein Thema von phreax · begonnen am 6. Feb 2007 · letzter Beitrag vom 6. Feb 2007
Antwort Antwort
Benutzerbild von phreax
phreax

Registriert seit: 1. Mai 2006
Ort: Dresden
147 Beiträge
 
Turbo Delphi für Win32
 
#1

Größe der eignenen Exe-Datei erfahren

  Alt 6. Feb 2007, 16:51
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

mfg Phreax
Und dann war da noch der junge Mann ....
... der unbedingt Schriftsteller werden wollte.
Er wollte Emotionen wecken und die Leute zum weinen bringen.
Sein Traum wurde wahr, er verfasst heute die Fehlermeldungen bei Microsoft!
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Größe der eignenen Exe-Datei erfahren

  Alt 6. Feb 2007, 16:57
Du willst also die Größe des kompilierten Codes haben?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
kill -9
(Gast)

n/a Beiträge
 
#3

Re: Größe der eignenen Exe-Datei erfahren

  Alt 6. Feb 2007, 17:00
Hey
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..
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Größe der eignenen Exe-Datei erfahren

  Alt 6. Feb 2007, 17:41
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)

http://luckie-online.de/dirindex.php...phi/Programme/
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Größe der eignenen Exe-Datei erfahren

  Alt 6. Feb 2007, 17:46
Hehe, da habe ich geschummelt und die Größe der Exe hardgecodet. Aber Nico hatte, glaube ich, mal einen Code gepostet dafür.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Größe der eignenen Exe-Datei erfahren

  Alt 6. Feb 2007, 18:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von phreax
phreax

Registriert seit: 1. Mai 2006
Ort: Dresden
147 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Größe der eignenen Exe-Datei erfahren

  Alt 6. Feb 2007, 20:00
Danke für die superschnelle Hilfe!!!

@ DErazerZer Code funktioniert wunderbar

@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 )


Also nochmals danke für die superpromte hilfe an alle!

mfg Phreax
Und dann war da noch der junge Mann ....
... der unbedingt Schriftsteller werden wollte.
Er wollte Emotionen wecken und die Leute zum weinen bringen.
Sein Traum wurde wahr, er verfasst heute die Fehlermeldungen bei Microsoft!
  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 14:23 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