版本字符串部分太短或太长

时间:2015-03-27 17:25:42

标签: vb.net version

我正在尝试检查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外。

它给了我以下错误:

Error Message

以下是工作文件与不工作文件之间的文件详细信息:

enter image description here

EXE有什么问题我为什么会收到这个错误?或者我有更好的方法来打印文件版本号吗?

1 个答案:

答案 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