Добрый день!
Подскажи пожалуйста новичку, как программно через Rational-Robot узнать версию файла (exe, dll в основном)
Как узнать версию файла?
Автор Rational-IT, 29 мар 2010 06:13
Сообщений в теме: 3
#1
Отправлено 29 марта 2010 - 06:13
#2
Отправлено 29 марта 2010 - 17:47
Хм, а вам зачем?
#3
Отправлено 30 марта 2010 - 09:46
Напишите на VBScript процедуру и вызовите ее в RR.Добрый день!
Подскажи пожалуйста новичку, как программно через Rational-Robot узнать версию файла (exe, dll в основном)
#4
Отправлено 30 марта 2010 - 11:16
Всем спасибо, разобрался!
Вот код, может кому и понадобиться
[codebox]Declare Sub CopyMem Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
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
Type VS_FIXEDFILEINFO
Signature As Long
StrucVersionl As Integer
StrucVersionh As Integer
FileVersionMSl As Integer
FileVersionMSh As Integer
FileVersionLSl As Integer
FileVersionLSh As Integer
ProductVersionMSl As Integer
ProductVersionMSh As Integer
ProductVersionLSl As Integer
ProductVersionLSh As Integer
FileFlagsMask As Long
FileFlags As Long
FileOS As Long
FileType As Long
FileSubtype As Long
FileDateMS As Long
FileDateLS As Long
End Type
Function FileVersionNo(sFileName As String) As String
Dim lFileHwnd As Long, lRet As Long, lBufferLen As Long, lplpBuffer As Long, lpuLen As Long
Dim abytBuffer() As Long
Dim tVerInfo As VS_FIXEDFILEINFO
Dim sBlock As String
Dim sStrucVer As String
Dim lentVerInfo As Long
lBufferLen = GetFileVersionInfoSize(sFileName, lFileHwnd)
If lBufferLen = 0 Then
Exit Function
End If
ReDim abytBuffer(lBufferLen)
Call GetFileVersionInfo(sFileName, 0&, lBufferLen, abytBuffer(0))
Call VerQueryValue(abytBuffer(0), "\", lplpBuffer, lpuLen)
Call CopyMem(tVerInfo, ByVal lplpBuffer, lentVerInfo)
lentVerInfo = 52
Call CopyMem(tVerInfo, ByVal lplpBuffer, lentVerInfo)
sStrucVer = Format$(tVerInfo.StrucVersionh) & "." & Format$(tVerInfo.StrucVersionl)
FileVersionNo = Format$(tVerInfo.FileVersionMSh) & "." & Format$(tVerInfo.FileVersionMSl, "00") & "."
End Function
Sub Main
msgbox FileVersionNo("C:\filename.exe")
End Sub
[/codebox]
Вот код, может кому и понадобиться
[codebox]Declare Sub CopyMem Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
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
Type VS_FIXEDFILEINFO
Signature As Long
StrucVersionl As Integer
StrucVersionh As Integer
FileVersionMSl As Integer
FileVersionMSh As Integer
FileVersionLSl As Integer
FileVersionLSh As Integer
ProductVersionMSl As Integer
ProductVersionMSh As Integer
ProductVersionLSl As Integer
ProductVersionLSh As Integer
FileFlagsMask As Long
FileFlags As Long
FileOS As Long
FileType As Long
FileSubtype As Long
FileDateMS As Long
FileDateLS As Long
End Type
Function FileVersionNo(sFileName As String) As String
Dim lFileHwnd As Long, lRet As Long, lBufferLen As Long, lplpBuffer As Long, lpuLen As Long
Dim abytBuffer() As Long
Dim tVerInfo As VS_FIXEDFILEINFO
Dim sBlock As String
Dim sStrucVer As String
Dim lentVerInfo As Long
lBufferLen = GetFileVersionInfoSize(sFileName, lFileHwnd)
If lBufferLen = 0 Then
Exit Function
End If
ReDim abytBuffer(lBufferLen)
Call GetFileVersionInfo(sFileName, 0&, lBufferLen, abytBuffer(0))
Call VerQueryValue(abytBuffer(0), "\", lplpBuffer, lpuLen)
Call CopyMem(tVerInfo, ByVal lplpBuffer, lentVerInfo)
lentVerInfo = 52
Call CopyMem(tVerInfo, ByVal lplpBuffer, lentVerInfo)
sStrucVer = Format$(tVerInfo.StrucVersionh) & "." & Format$(tVerInfo.StrucVersionl)
FileVersionNo = Format$(tVerInfo.FileVersionMSh) & "." & Format$(tVerInfo.FileVersionMSl, "00") & "."
End Function
Sub Main
msgbox FileVersionNo("C:\filename.exe")
End Sub
[/codebox]
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных