Rubrik: | VB-Versionen: VB2005, VB2008, VB2010 | 08.08.11 |
Seit spätestens Windows Vista gibt es immer mehr reine 64-Bit Anwendungen. Mit nachfolgender Funktion lässt sich aus der eigenen Anwendung heraus schnell prüfen, ob es sich bei einer bestimmten Datei um für 32-Bit oder für 64-Bit
Systeme kompilierte ausführbare Datei handelt.
Die Funktion gibt hierbei folgende Rückgabewerte zurück:
- 0, wenn es sich um keine ausführbare Datei handelt
- 32, wenn es sich um eine 32-Bit kompilierte Datei handelt
- 64, wenn es sich um eine 64-Bit kompilierte Datei handelt
''' <summary>
''' Prüft, ob es sich um ein ausführbare 32-Bit oder 64-Bit handelt.
''' </summary>
''' <param name="Filename">Dateiname</param>
''' <returns>
''' 0, wenn es sich um keine ausführbare Datei handelt
''' 32, wenn es sich um eine 32-Bit Datei handelt
''' 64, wenn es sich um eine 64-Bit Datei handelt</returns>
''' <remarks></remarks>
Public Function Is64BitFile(ByVal Filename As String) As Integer
Dim Result As Integer = 0
If My.Computer.FileSystem.FileExists(Filename) Then
Dim oStream As New IO.FileStream(Filename, IO.FileMode.Open, _
IO.FileAccess.Read, IO.FileShare.Read)
Dim Data() As Byte
With oStream
' Offset auslesen
Data = New Byte(3) {}
.Seek(60, IO.SeekOrigin.Begin)
.Read(Data, 0, 4)
Dim Offset As Integer = BitConverter.ToInt32(Data, 0)
' gültiger Offset?
If Offset > 60 Then
' jetzt prüfen, ob es sich um eine ausführbare Datei handelt
Data = New Byte(4) {}
.Seek(Offset, IO.SeekOrigin.Begin)
.Read(Data, 0, 5)
If Data(0) = 80 And Data(1) = 69 And Data(2) = 0 And Data(3) = 0 And Data(4) = 76 Then
' jetzt COFF File Header auslesen
Data = New Byte(20) {}
.Read(Data, 0, 21)
' 32-Bit oder 64-Bit?
Dim Flag As Integer = BitConverter.ToInt16(Data, 19)
If Flag = &H10B Then
' 32-Bit
Result = 32
ElseIf Flag = &H20B Then
Result = 64
End If
End If
End If
.Close()
End With
End If
Return (Result)
End Function