Hallo,
im "Info über"-Formular möchte ich den Tag und die Zeit anzeigen, bei der die Exe erstellt wurde.
Dazu nutze ich die hier in EE vorgestellte Funktion
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function GetCreationTimeOfFile(const AFileName: String): TDateTime; var SR: TSearchRec; SystemTime: TSystemTime; NewCreationTime: TFileTime; begin Result:=0; if FindFirst(AFileName, faAnyFile, SR)=0 then try IF (Windows.FileTimeToLocalFiletime(SR.FindData.ftCreationTime, NewCreationTime) and Windows.FileTimeToSystemTime(NewCreationTime, SystemTime)) Then Result:=Encodedate(SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay) + Encodetime(SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, SystemTime.wMilliseconds); finally SysUtils.FindClose(SR) end; end; |
und rufe sie mit
Delphi-Quelltext
1:
| datetimetostr(GetCreationTimeOfFile(application.exename)) |
auf.
Prinzipiell funktioniert es schon, allerdings habe ich einen merkwürdigen Effekt.
Compiliere ich die Exe, so erhalte ich mit dieser Funktion nicht jedes Mal die korrekte Zeit. Manchmal weicht der Wert um 20 min ab, manchmal nur um 10 min, ...
Ganz komisch ist: Eine erstellte Exe zeigt korrekt 3.4. 20.34 Uhr. Kopiere ich die Datei auf einen Stick und starte von dort, zeigt die Info mir auf einmal 31.3. als Datum an. Diese Datei vom Stick auf einen anderen Rechner kopiert, ergab heute früh als Anzeigedatum 4.4.
Ich kann mir das nur so erklären, dass nicht der Zeitpunkt der Compilierung/Erstellung hier ausgewertet wird, sondern der Zeitpunkt, wann die Datei erstmals(?) in einen bestimmten Ordner kopiert wird.
Das erklärt aber den 31.3. auf dem Stick nicht und widerspricht auch einem Versuch, bei dem ich Exe einfach in einen anderen Ordner kopiert habe, ohne Änderung der Zeitanzeige.
Konkret benötige ich die korrekte Compilierzeit. Scheinbar geht das aber so nicht.
Weiß jemand Rat? Danke für Hinweise.
Beste Grüße
Mathematiker