我正在尝试检查VB.Net上的一些EXE文件的版本号。
这是我在网上找到的代码:
Public Class Form1
'\\ Pulls the file version out of the exe properties
Private Function GetFileVersionInfo(ByVal filename As String) As Version
Return Version.Parse(FileVersionInfo.GetVersionInfo(filename).ProductVersion)
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show("Version: " + GetFileVersionInfo("C:\Users\jborg\SkyDrive Pro\Client Software\Malware Tools\HitmanPro.exe").ToString)
End Sub
End Class
代码完美无缺,除了代码中列出的EXE外。
它给了我以下错误:
以下是工作文件与不工作文件之间的文件详细信息:
EXE有什么问题我为什么会收到这个错误?或者我有更好的方法来打印文件版本号吗?
答案 0 :(得分:0)
我不确定你在这个传奇中的位置,但如果Parse
失败了,你可以使用TryParse
来至少避免异常:
Dim str = FileVersionInfo.GetVersionInfo(fname).ProductVersion()
If Version.TryParse(str, ver) = False Then
...
End If
您还可以为任何无效,缺失或可能冒犯的作品提供您自己的解析器和默认值:
Dim ver As New Version()
If Version.TryParse(str, ver) = False Then
Dim parts = str.Split("."c)
ver = New Version(
If(parts.Length >= 1, ValueOrDefault(parts(0)), 0),
If(parts.Length >= 2, ValueOrDefault(parts(1)), 0),
If(parts.Length >= 3, ValueOrDefault(parts(2)), 0),
If(parts.Length >= 4, ValueOrDefault(parts(3)), 0)
)
End If
' a helper function to
' get the int value of a string or 0 if "too long or too short"
Private Function ValueOrDefault(str As String) As Integer
Dim n As Integer
If Int32.TryParse(str, n) Then
' trap for values < 0
Return If(n < 0, 0, n)
' or: Return If(n < 0, 0 - n, n)
Else
Return 0
End If
End Function
给定一个字符串过大的字符串:vstr = "1.435973459374957394.6.7.8"
,结果为"1.0.6.7"
。跳过第二个超大值,使用默认值0。
对于"1"
,结果为"1.0.0.0"
,对于&#34; Hello,World!&#34;或任何其他非数字或空字符串,结果为0.0.0.0
。