AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wann wurde die exe compiliert?

Ein Thema von FriFra · begonnen am 28. Jan 2009 · letzter Beitrag vom 29. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#1

Wann wurde die exe compiliert?

  Alt 28. Jan 2009, 22:30
Ich weiß, dass es eine Möglichkeit gibt den Zeitstempel der Compilierung einer Delphi-Anwendung auszulesen, aber ich kann es gerade nicht finden. Hat jemand einen Tipp?
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Wann wurde die exe compiliert?

  Alt 28. Jan 2009, 22:35
Hast du das gesucht: http://www.michael-puff.de/Developer...imeStamp.shtml
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#3

Re: Wann wurde die exe compiliert?

  Alt 28. Jan 2009, 22:35
Hi,
vielleicht hilft dir das hier weiter:

http://www.delphi-treff.de/tipps/dat...n%20ermitteln/

EDIT: Man muss aber das Datum der letzten Änderung nehmen. Lässt sich in den Code leicht einbauen...

Ciao,
Andy
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Wann wurde die exe compiliert?

  Alt 28. Jan 2009, 23:01
Zitat von Andreas L.:
Hi,
vielleicht hilft dir das hier weiter:

http://www.delphi-treff.de/tipps/dat...n%20ermitteln/

EDIT: Man muss aber das Datum der letzten Änderung nehmen. Lässt sich in den Code leicht einbauen...

Ciao,
Andy
Das ist aber nicht sicher. Zum einem kann man diesen Zeitstemepl recht leicht manipulieren und zum anderen kann es passieren, dass Windows ihn beim Kopieren von einem Datenträger ändert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#5

Re: Wann wurde die exe compiliert?

  Alt 28. Jan 2009, 23:48
Zitat von Luckie:
Zitat von Andreas L.:
Hi,
vielleicht hilft dir das hier weiter:

http://www.delphi-treff.de/tipps/dat...n%20ermitteln/

EDIT: Man muss aber das Datum der letzten Änderung nehmen. Lässt sich in den Code leicht einbauen...

Ciao,
Andy
Das ist aber nicht sicher. Zum einem kann man diesen Zeitstemepl recht leicht manipulieren und zum anderen kann es passieren, dass Windows ihn beim Kopieren von einem Datenträger ändert.
Stimmt, hast recht. Hab wohl nicht weit genug gedacht
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Wann wurde die exe compiliert?

  Alt 29. Jan 2009, 01:54
@Luckie: Genau das was Du ials erstes verlinkt hat, hab ich gesucht Danke!


P.S.: Deine Seite bekomm ich in der Firma nicht aufgerufen, weil "puff" geblockt ist
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#7

Re: Wann wurde die exe compiliert?

  Alt 29. Jan 2009, 07:48
Also, ich hatte das gleiche Problem. Wollte nicht auf das Erstellt-Datum zurückgreifen, wegen der leichten Möglichkeit der Änderung.
Ich greife auf den PE-Header zurück. In diesem steht ein Time Date Stamp.
Den kann man mit
Delphi-Quellcode:
procedure UpdateLinkerTimeStamp(const FileName: string; const Time: TDateTime);
  var
    LI: _LOADED_IMAGE; //TLoadedImage;
  begin
    Win32Check(MapAndLoad(PChar(FileName), nil, @LI, False, False));
    LI.FileHeader.FileHeader.TimeDateStamp := Round((Time - 25569 {entspr. UnixDateDelta}) * SecsPerDay);
    UnMapAndLoad(@LI);
  end;
setzen. Ich weiß nicht, wie das in neueren Delphiversionen ist, aber unter Delphi 5 muss man den noch selbst setzen. Das mache ich auf jeden Fall mit einem IDE-Experten automatisch nach dem Kompilieren.

Auslese kann man das ganze dann mit
Delphi-Quellcode:
Function GetPEDateTime(Filename : String) : double;
Var
  fs : TFilestream;
  signature : DWORD;
  dos_header : IMAGE_DOS_HEADER;
  pe_header : IMAGE_FILE_HEADER;
Begin
  Result := EncodeDate(1968,8,22);
  If Not Fileexists(Filename) Then
    Exit;
  fs := TFilestream.Create(FileName,fmOpenread Or fmShareDenyNone);
  Result := 0;
  Try
    fs.read(dos_header,SizeOf(dos_header));
    If dos_header.e_magic <> IMAGE_DOS_SIGNATURE Then
      Exit;

    fs.seek(dos_header._lfanew,soFromBeginning);
    fs.read(signature,SizeOf(signature));
    If signature <> IMAGE_NT_SIGNATURE Then
      Exit;

    fs.read(pe_header,SizeOf(pe_header));
    Result := (EncodeDate(1970,1,1) + pe_header.Timedatestamp / SecsPerDay);
  Finally
    fs.Free;
  End; { finally }
End;
Das ganze funktioniert wunderbar. Und der große Vorteil ist, dass dieses Datum nicht beim Versenden per eMail geändert wird.

Gruß

BBB
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Wann wurde die exe compiliert?

  Alt 29. Jan 2009, 07:58
Und genau das macht auch der von mir verlinkte Code von Nico.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#9

Re: Wann wurde die exe compiliert?

  Alt 29. Jan 2009, 08:10
@lucky:

Da bin ich mir nicht so sicher. Wenn ich den Code von Nico richtig verstanden habe, wird da der Wert angezeigt, der bei einer Datei unter 'Eigenschaften' - 'Erstellt' steht angegeben. Und der kann sich von dem Datum im PE-Header unterscheiden. Ich hatte das Problem öfters beim Versenden per eMail. Da wurde beim Speichern der Datei aus dem Dateianhang das Datum neu gesetzt. Un genau das passiert beim PE-Header nicht!

BBB
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Wann wurde die exe compiliert?

  Alt 29. Jan 2009, 08:20
Er holt den Timestamp genau wie du aus dem PE-Header:
Delphi-Quellcode:
if not ReadFile(FileHandle, ImageDosHeader, SizeOf(TImageDosHeader),
      BytesRead, nil) or (BytesRead <> SizeOf(TImageDosHeader)) or
      (ImageDosHeader.e_magic <> IMAGE_DOS_SIGNATURE) then
    begin
      ImageDosHeader._lfanew := 0;
    end;
    // Read PE32 header (including optional header
    if (SetFilePointer(FileHandle, ImageDosHeader._lfanew, nil, FILE_BEGIN) =
      INVALID_SET_FILE_POINTER) then
    begin
      Exit;
    end;
    if not(ReadFile(FileHandle, ImageNtHeaders, SizeOf(TImageNtHeaders),
      BytesRead, nil) and (BytesRead = SizeOf(TImageNtHeaders))) then
    begin
      Exit;
    end;
    // Validate PE32 image header
    if (ImageNtHeaders.Signature <> IMAGE_NT_SIGNATURE) then
    begin
      Exit;
    end;
    // Seconds since 1970 (UTC)
    Result := ImageNtHeaders.FileHeader.TimeDateStamp;
Nur bei Borland Exe-Dateien macht er noch etwas zusätzlich.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:08 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