Results 1 to 4 of 4

Thread: Reading the version of an EXE

  1. #1

    Thread Starter
    Fanatic Member Kzin's Avatar
    Join Date
    Dec 2000
    Posts
    611

    Reading the version of an EXE

    How do I read the version number of an EXE (not the one that I'm running but a separate one on the HDD)?
    Looking for a friendly intelligent chat forum? Visit the white-hart.net

  2. #2
    Need-a-life Member Mc Brain's Avatar
    Join Date
    Apr 2000
    Location
    Buenos Aires, Argentina
    Posts
    6,808
    VB Code:
    1. Private Declare Function GetFileVersionInfo Lib _
    2.    "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, _
    3.    ByVal dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long
    4. Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias _
    5.    "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle _
    6.    As Long) As Long
    7. Private Declare Function VerQueryValue Lib "Version.dll" Alias _
    8.    "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer _
    9.    As Any, puLen As Long) As Long
    10. Private Declare Sub MoveMemory Lib "kernel32" Alias _
    11.    "RtlMoveMemory" (dest As Any, ByVal Source As Long, ByVal length As Long)
    12.  
    13. Public Type tFileInfo
    14.     FullFileName As String
    15.     StrucVer As String
    16.     FileVer As String
    17.     ProdVer As String
    18.     FileFlags As String
    19.     FileOS As String
    20.     FileType As String
    21.     FileSubType As String
    22. End Type
    23.  
    24. Public Sub DisplayVerInfo(Directory As String, FileName As String, FInfo As tFileInfo)
    25.     Dim rc As Long, lDummy As Long, sBuffer() As Byte
    26.     Dim lBufferLen As Long, lVerPointer As Long, udtVerBuffer As VS_FIXEDFILEINFO
    27.     Dim lVerbufferLen As Long
    28.  
    29.     With FInfo
    30.     '*** Get size ****
    31.         .FullFileName = Directory & IIf(Right$(Directory, 1) = "\", "", "\") & FileName
    32.         lBufferLen = GetFileVersionInfoSize(.FullFileName, lDummy)
    33.         If lBufferLen < 1 Then
    34.             MsgBox "No Version Info available!"
    35.             Exit Sub
    36.         End If
    37.        
    38.         '**** Store info to udtVerBuffer struct ****
    39.         ReDim sBuffer(lBufferLen)
    40.         rc = GetFileVersionInfo(.FullFileName, 0&, lBufferLen, sBuffer(0))
    41.         rc = VerQueryValue(sBuffer(0), "\", lVerPointer, lVerbufferLen)
    42.         MoveMemory udtVerBuffer, lVerPointer, Len(udtVerBuffer)
    43.        
    44.         '**** Determine Structure Version number - NOT USED ****
    45.         .StrucVer = Format$(udtVerBuffer.dwStrucVersionh) & "." & Format$(udtVerBuffer.dwStrucVersionl)
    46.        
    47.         '**** Determine File Version number ****
    48.         '''        .FileVer = Format$(udtVerBuffer.dwFileVersionMSh) & "." _
    49. '''                 & Format$(udtVerBuffer.dwFileVersionMSl) & "." _
    50. '''                 & Format$(udtVerBuffer.dwFileVersionLSh) & "." _
    51. '''                 & Format$(udtVerBuffer.dwFileVersionLSl)
    52. '''
    53.         .FileVer = Format$(udtVerBuffer.dwFileVersionMSh) & "." _
    54.                  & Format$(udtVerBuffer.dwFileVersionMSl) & "." _
    55.                  & Format$(udtVerBuffer.dwFileVersionLSl)
    56.                  
    57.         '**** Determine Product Version number ****
    58.         .ProdVer = Format$(udtVerBuffer.dwProductVersionMSh) & "." & _
    59.    Format$(udtVerBuffer.dwProductVersionMSl) & "." & _
    60.    Format$(udtVerBuffer.dwProductVersionLSh) & "." &  _
    61.    Format$(udtVerBuffer.dwProductVersionLSl)
    62.        
    63.         '**** Determine Boolean attributes of File ****
    64.         .FileFlags = ""
    65.         If udtVerBuffer.dwFileFlags And VS_FF_DEBUG Then .FileFlags = "Debug "
    66.         If udtVerBuffer.dwFileFlags And VS_FF_PRERELEASE Then .FileFlags = .FileFlags & "PreRel "
    67.         If udtVerBuffer.dwFileFlags And VS_FF_PATCHED Then .FileFlags = .FileFlags & "Patched "
    68.         If udtVerBuffer.dwFileFlags And VS_FF_PRIVATEBUILD Then .FileFlags = .FileFlags & "Private "
    69.         If udtVerBuffer.dwFileFlags And VS_FF_INFOINFERRED Then .FileFlags = .FileFlags & "Info "
    70.         If udtVerBuffer.dwFileFlags And VS_FF_SPECIALBUILD Then .FileFlags = .FileFlags & "Special "
    71.         If udtVerBuffer.dwFileFlags And VFT2_UNKNOWN Then .FileFlags = .FileFlags + "Unknown "
    72.        
    73.         '**** Determine OS for which file was designed ****
    74.         Select Case udtVerBuffer.dwFileOS
    75.             Case VOS_DOS_WINDOWS16
    76.                 .FileOS = "DOS-Win16"
    77.             Case VOS_DOS_WINDOWS32
    78.                 .FileOS = "DOS-Win32"
    79.             Case VOS_OS216_PM16
    80.                 .FileOS = "OS/2-16 PM-16"
    81.             Case VOS_OS232_PM32
    82.                 .FileOS = "OS/2-16 PM-32"
    83.             Case VOS_NT_WINDOWS32
    84.                 .FileOS = "NT-Win32"
    85.             Case Else
    86.                 .FileOS = "Unknown"
    87.             End Select
    88.             Select Case udtVerBuffer.dwFileType
    89.                 Case VFT_APP
    90.                     .FileType = "App"
    91.                 Case VFT_DLL
    92.                     .FileType = "DLL"
    93.                 Case VFT_DRV
    94.                     .FileType = "Driver"
    95.                 Select Case udtVerBuffer.dwFileSubtype
    96.                     Case VFT2_DRV_PRINTER
    97.                         .FileSubType = "Printer drv"
    98.                     Case VFT2_DRV_KEYBOARD
    99.                         .FileSubType = "Keyboard drv"
    100.                     Case VFT2_DRV_LANGUAGE
    101.                         .FileSubType = "Language drv"
    102.                     Case VFT2_DRV_DISPLAY
    103.                         .FileSubType = "Display drv"
    104.                     Case VFT2_DRV_MOUSE
    105.                         .FileSubType = "Mouse drv"
    106.                     Case VFT2_DRV_NETWORK
    107.                         .FileSubType = "Network drv"
    108.                     Case VFT2_DRV_SYSTEM
    109.                         .FileSubType = "System drv"
    110.                     Case VFT2_DRV_INSTALLABLE
    111.                         .FileSubType = "Installable"
    112.                     Case VFT2_DRV_SOUND
    113.                         .FileSubType = "Sound drv"
    114.                     Case VFT2_DRV_COMM
    115.                         .FileSubType = "Comm drv"
    116.                     Case VFT2_UNKNOWN
    117.                         .FileSubType = "Unknown"
    118.                 End Select
    119.                 Case VFT_FONT
    120.                     .FileType = "Font"
    121. '                Select Case udtVerBuffer.dwFileSubtype
    122. '                    Case VFT_FONT_RASTER
    123. '                        .FileSubType = "Raster Font"
    124. '                    Case VFT_FONT_VECTOR
    125. '                        .FileSubType = "Vector Font"
    126. '                    Case VFT_FONT_TRUETYPE
    127. '                        .FileSubType = "TrueType Font"
    128. '                End Select
    129.             Case VFT_VXD
    130.                 .FileType = "VxD"
    131.             Case VFT_STATIC_LIB
    132.                 .FileType = "Lib"
    133.             Case Else
    134.                 .FileType = "Unknown"
    135.         End Select
    136.     End With
    137. End Sub
    138.  
    139. Private Sub Command1_Click()
    140.     MsgBox GetFileVersion(App.Path & "\", "File.Exe")
    141. End Sub
    142.  
    143. Private Function GetFileVersion(Path As String, FileName As String)
    144.     Dim FInfo As tFileInfo
    145.    
    146.     DisplayVerInfo UtilPath, FileName, FInfo
    147.    
    148.     GetFileVersion = FInfo.FileVer
    149. End Function
    Emiliano F. Martín


    If a post has helped you then please Rate it! (and give the user points he/she deserves by clicking on the image).
    Encourage the person who helped you to keep doing it, and give him the points he deserves.


    MP3 Organizer: Freeware to logically organize all your MP3s.

  3. #3

    Thread Starter
    Fanatic Member Kzin's Avatar
    Join Date
    Dec 2000
    Posts
    611
    Thank you.

    I think I need to type def VS_FIXEDFILEINFO etc. to make this run. Can you help with that?
    Looking for a friendly intelligent chat forum? Visit the white-hart.net

  4. #4
    Not NoteMe SLH's Avatar
    Join Date
    Mar 2002
    Location
    192.168.0.1 Preferred Animal: Penguin Reason for errors: Line#38
    Posts
    3,051
    Use the APIViewer
    "C:\Program Files\Microsoft Visual Studio\Common\Tools\Winapi\Apiload.exe"
    VB Code:
    1. Public Type VS_FIXEDFILEINFO
    2.         dwSignature As Long
    3.         dwStrucVersion As Long         '  e.g. 0x00000042 = "0.42"
    4.         dwFileVersionMS As Long        '  e.g. 0x00030075 = "3.75"
    5.         dwFileVersionLS As Long        '  e.g. 0x00000031 = "0.31"
    6.         dwProductVersionMS As Long     '  e.g. 0x00030010 = "3.10"
    7.         dwProductVersionLS As Long     '  e.g. 0x00000031 = "0.31"
    8.         dwFileFlagsMask As Long        '  = 0x3F for version "0.42"
    9.         dwFileFlags As Long            '  e.g. VFF_DEBUG Or VFF_PRERELEASE
    10.         dwFileOS As Long               '  e.g. VOS_DOS_WINDOWS16
    11.         dwFileType As Long             '  e.g. VFT_DRIVER
    12.         dwFileSubtype As Long          '  e.g. VFT2_DRV_KEYBOARD
    13.         dwFileDateMS As Long           '  e.g. 0
    14.         dwFileDateLS As Long           '  e.g. 0
    15. End Type
    Quotes:
    "I am getting better then you guys.." NoteMe, on his leet english skills.
    "And I am going to meat her again later on tonight." NoteMe
    "I think you should change your name to QuoteMe" Shaggy Hiker, regarding NoteMe
    "my sweet lord jesus. I've decided never to have breast implants" Tom Gibbons
    Have I helped you? Please Rate my posts.


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width