vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB2005, VB2008, VB201008.08.11
Prüfen, ob es sich um eine 32-Bit oder 64-Bit ausführbare Datei handelt

Diese Funktion ermittelt, ob es sich bei der übergebenen Datei um eine 32-Bit oder 64-Bit kompilierten ausführbaren Datei handelt.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.505 
http://www.tools4vb.de/System:  WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

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