powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить версию файла.
7 сообщений из 7, страница 1 из 1
Получить версию файла.
    #36988768
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получить версию самого себя достаточно просто:
Код: plaintext
MsgBox CStr(App.Major) & "." & CStr(App.Minor) & "." & CStr(App.Revision)

Надо получить версию внешнего файла:
Если не искать легких путей(пока с примером не разбирался), то
Get file version information

Но, скажем так, при вводе на вкладке Project->Project Properties->Make->Version Number значений:
Major=1 Minor=2 Revision=3
в свойствах файла это будет видеться/читаться несколько иначе:
Сверху будет
Версия файла 1.2.0.3
В дополнительных сведениях будет:
Версия продукта 1.02.0003
Версия файла 1.02.0003

И вышеприведенный API-код именно нечто подобное и прочтет.
Привести к каноническому виду "1.2.3" конечно можно...

Но вопрос...
Нельзя ли по-простому прочитать в виде "1.2.3" версию внешнего файла, если известно что он создан на VB?
Так как я это делаю в верхнем коде: [App.Major].[App.Minor].[App.Revision]
...
Рейтинг: 0 / 0
Получить версию файла.
    #36989113
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, если немного причесать код из "нелегкого" примера то получается не так и страшно и то что нужно:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
Option Explicit

'API declarations.
Private Type VS_FIXEDFILEINFO
    dwSignature As Long
    dwStrucVersionl As Integer     '  e.g. = &h0000 = 0
    dwStrucVersionh As Integer     '  e.g. = &h0042 = .42
    dwFileVersionMSl As Integer    '  e.g. = &h0003 = 3
    dwFileVersionMSh As Integer    '  e.g. = &h0075 = .75
    dwFileVersionLSl As Integer    '  e.g. = &h0000 = 0
    dwFileVersionLSh As Integer    '  e.g. = &h0031 = .31
    dwProductVersionMSl As Integer '  e.g. = &h0003 = 3
    dwProductVersionMSh As Integer '  e.g. = &h0010 = .1
    dwProductVersionLSl As Integer '  e.g. = &h0000 = 0
    dwProductVersionLSh As Integer '  e.g. = &h0031 = .31
    dwFileFlagsMask As Long        '  = &h3F for version "0.42"
    dwFileFlags As Long            '  e.g. VFF_DEBUG Or VFF_PRERELEASE
    dwFileOS As Long               '  e.g. VOS_DOS_WINDOWS16
    dwFileType As Long             '  e.g. VFT_DRIVER
    dwFileSubtype As Long          '  e.g. VFT2_DRV_KEYBOARD
    dwFileDateMS As Long           '  e.g. 0
    dwFileDateLS As Long           '  e.g. 0
End Type

Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long
Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, ByVal Source As Long, ByVal length As Long)

'Return file version information string.
Public Function GetFileVersionOnly(ByVal file_name As String) As String
    Dim dummy_handle As Long
    Dim buffer() As Byte
    Dim info_size As Long
    Dim info_address As Long
    Dim fixed_file_info As VS_FIXEDFILEINFO
    Dim fixed_file_info_size As Long
    Dim result As String

    GetFileVersionOnly = ""
    ' Get the version information buffer size.
    info_size = GetFileVersionInfoSize(file_name, dummy_handle)
    If info_size =  0  Then
        'MsgBox "No version information available"
        Exit Function
    End If

    ' Load the fixed file information into a buffer.
    ReDim buffer( 1  To info_size)
    If GetFileVersionInfo(file_name,  0 &, info_size, buffer( 1 )) =  0  Then
        'MsgBox "Error getting version information"
        Exit Function
    End If
    If VerQueryValue(buffer( 1 ), "\", info_address, fixed_file_info_size) =  0  Then
        'MsgBox "Error getting fixed file version information"
        Exit Function
    End If

    ' Copy the information from the buffer into a
    ' usable structure.
    MoveMemory fixed_file_info, info_address, Len(fixed_file_info)

    ' Get the version information.
    With fixed_file_info
        ' File version number.
        'result = _
        '    Format$(.dwFileVersionMSh) & "." & _
        '    Format$(.dwFileVersionMSl) & "." & _
        '    Format$(.dwFileVersionLSh) & "." & _
        '    Format$(.dwFileVersionLSl)
        result = _
            Format$(.dwFileVersionMSh) & "." & _
            Format$(.dwFileVersionMSl) & "." & _
            Format$(.dwFileVersionLSl)
    End With

    GetFileVersionOnly = result
End Function
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Получить версию файла.
    #38240595
Bagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну спасибо Вам друзья за примеры. Просто готовое решение!
...
Рейтинг: 0 / 0
Получить версию файла.
    #38240625
Bagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще вот нашелся способ и покороче
Код: vbnet
1.
2.
3.
4.
 Dim FSO As Object, sFullName as String
 Set FSO = CreateObject("Scripting.FileSystemObject")
 sFullName = "C:\my.dll"
 Debug.Print FSO.GetFileVersion(sFullName)
...
Рейтинг: 0 / 0
Получить версию файла.
    #38240864
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bagir,

Не доверяю я "Scripting.FileSystemObject", не надежный это Object.
Уже и не помню почему. Ну, можешь сделать поиск по этому форуму чтоб узнать почему.
...
Рейтинг: 0 / 0
Получить версию файла.
    #38241272
Bagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не скажу что пользуюсь очень часто, но после знакомства он мне очень понравился. Ни разу не подводил, но раз есть замечания, конечно почитаю.
...
Рейтинг: 0 / 0
Получить версию файла.
    #38242115
Nutz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Bagir,

Не доверяю я "Scripting.FileSystemObject", не надежный это Object.
Уже и не помню почему. Ну, можешь сделать поиск по этому форуму чтоб узнать почему.

Это "боязнь внешних компонентов", болезнь характерная для vb-шников.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить версию файла.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]