Siehe FileInfo-Class(CreationTime, LastAccessTime, LastWriteTime)
--
Gruß Scotty
Ich habe aber jetzt gerade meine Exe neu erstellt ! (neu erstellen unter
Visual Studio)
habe aber noch immer in Erstellt 25.01.2007 drin. :(
Oder wird dies Datum nur geändert wenn man ein neues Setup erstellt ?
Gruss
"Karsten Sosna" <k.sosna-...@t-online.de> schrieb im Newsbeitrag
news:%23ZRRp$VRHHA...@TK2MSFTNGP02.phx.gbl...
"Andreas Kammann" schrieb:
> Hallo, bei meiner Exe von meiner Applikation habe ich folgendes.
> Erstellt 25.01.2007
> Geändert am 31.01.2007
> letzter Zugriff 31.01.2007
>
> Ich habe aber jetzt gerade meine Exe neu erstellt ! (neu erstellen unter
> Visual Studio)
> habe aber noch immer in Erstellt 25.01.2007 drin. :(
>
> Oder wird dies Datum nur geändert wenn man ein neues Setup erstellt ?
Probier mal folgendes: Lösch die Exe Datei und erstell sie dann innerhalb
von wenigen Sekunden neu. Dann schaust du mal auf das Erstellungsdatum.
Dasselbe machst du dann nochmal, lässt aber ein paar Minuten vergehen.
Um noch einen draufzulegen, such dir mal eine alte Datei, die du nicht
mehr brauchst. Löschen und einfach eine neue Textdatei mit dem Namen
und der Dateierweiterung der alten Datei erstellen (innerhalb weniger
Sekunden)
Was ich damit sagen will: Auf das Erstellungsdatum darfst du dich nicht
verlassen.
--
Tschau, Stefan
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
Der Compiler speichert beim Erstellen den Zeitstempel im PE-Header der
erstellten EXE/DLL. Anbei ein Beispiel, wie Du diesen auslesen kannst:
' -- PEBuildDate.vb --
' Konsolenanwendung 'pebuildate.exe'
Option Strict On
Imports System.IO
' PEBuildDate Beispielanwendung
' Gibt die eigene Version und das Erstellungsdatum aus.
' Wird als Argument der Pfad zu einer gültigen PE-Datei (EXE/DLL)
' angegeben, wird deren Erstellungsdatum ebenso angezeigt:
Module Module1
Sub Main()
Dim lArgs() As String = Environment.GetCommandLineArgs()
Dim lVersion As Version = _
System.Reflection.Assembly.GetExecutingAssembly.GetName().Version
Console.WriteLine("PE BuildDate " & lVersion.ToString(4))
Console.WriteLine("Erstellt am: " & _
BuildInfo.PEBuildDate().ToString & _
ControlChars.NewLine)
If lArgs.Length > 1 Then
Console.WriteLine(Path.GetFileName(lArgs(1)))
Try
Console.WriteLine("wurde erstellt am: " & _
BuildInfo.PEBuildDate(lArgs(1)).ToString)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Exit Sub
End If
Console.WriteLine("Anwendung:{0}{0} pebuildate Dateiname", _
ControlChars.NewLine)
End Sub
End Module
Friend Class BuildInfo
Public Shared Function PEBuildDate() As Date
Return PEBuildDate(System.Reflection.Assembly.GetExecutingAssembly)
End Function
Public Shared Function PEBuildDate( _
ByVal [assembly] As System.Reflection.Assembly _
) As Date
Return PEBuildDate([assembly].Location)
End Function
Public Shared Function PEBuildDate( _
ByVal filename As String _
) As Date
Dim lPEOffset As Integer
Dim lPE() As Char
Dim lTimeStamp As Integer
Dim lDate As New Date(1970, 1, 1)
Const PE_OFFSET As Integer = &H3C
Const PE_TIMESTAMP As Integer = 8
Const PE_SIGNATURE As String = "PE" & _
ControlChars.NullChar & _
ControlChars.NullChar
If Not System.IO.File.Exists(filename) Then
Throw New FileNotFoundException
End If
Dim lStream As Stream = File.Open(filename, _
FileMode.Open, _
FileAccess.Read)
Dim lReader As New BinaryReader(lStream)
lReader.BaseStream.Seek(PE_OFFSET, SeekOrigin.Begin)
lPEOffset = lReader.ReadInt32()
lReader.BaseStream.Seek(lPEOffset, SeekOrigin.Begin)
lPE = lReader.ReadChars(PE_SIGNATURE.Length)
If Not String.Equals(lPE, PE_SIGNATURE) Then
lReader.Close()
Throw New InvalidPEFileException
End If
lReader.BaseStream.Seek(lPEOffset + PE_TIMESTAMP, _
SeekOrigin.Begin)
lTimeStamp = lReader.ReadInt32()
lReader.Close()
Return lDate.AddSeconds(lTimeStamp).ToLocalTime
End Function
End Class
Friend Class InvalidPEFileException
Inherits System.Exception
Public Sub New()
MyBase.New("Die Datei ist keine gültige PE-Datei.")
End Sub
End Class
' --
Thorsten Dörfler
--
vb-hellfire - einfach anders
http://www.vb-hellfire.de/
Hallo Thorsten,
gefällt mir deine Lösung...was wären wir ohne die PE Spezifikation,
was..!?!?
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
Beste Grüße
Kerem Gümrükcü
immer einen Fehler, Der Prozess kann nicht auf die Datei ... zugreifen, da
sie von einem anderen Prozess verwendet wird.
Gruss
folgender Code gibt Dir genau das zurück, was Du willst - ohne
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim MyPath As String =
System.Reflection.Assembly.GetExecutingAssembly.Location()
MsgBox(CreatedOn(MyPath).ToString)
End Sub
Private Function CreatedOn(ByVal Exe As String) As Date
Return New System.IO.FileInfo(Exe).CreationTime
End Function
Beste Grüße,
Martin
Das Erstellungsdatum gibt in dem Fall nur den Zeitpunkt der
erstmaligen Erstellung an. Bei weiteren Build-Aktionen wird dieses
Datum nicht mehr angerührt, es sei denn man löscht zuvor die
Ausgabedateien.
> Das Erstellungsdatum gibt in dem Fall nur den Zeitpunkt der
> erstmaligen Erstellung an. Bei weiteren Build-Aktionen wird dieses
> Datum nicht mehr angerührt, es sei denn man löscht zuvor die
> Ausgabedateien.
das ist schon klar. Hatte der OP ja auch in seinem Posting klargemacht.
Beste Grüße,
Martin