Vb.net 版本字符串部分太短或太长

Vb.net 版本字符串部分太短或太长,vb.net,version,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

我正在用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的EXCEPT

它给了我以下错误:

以下是工作文件和非工作文件之间的文件详细信息:


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

我不确定您在这个故事中的位置,但是如果
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
Dim ver As New Version()
如果Version.TryParse(str,ver)=False,则
尺寸部件=结构拆分(“.”c)
版本=新版本(
如果(parts.Length>=1,则值默认值(parts(0)),0),
如果(parts.Length>=2,则值默认值(parts(1)),0),
如果(parts.Length>=3,则值默认值(parts(2)),0),
如果(parts.Length>=4,则值默认值(parts(3)),0)
)
如果结束
'一个帮助函数
'获取字符串的int值,如果“太长或太短”,则获取0
私有函数valuerDefault(str作为字符串)作为整数
作为整数的Dim n
如果Int32.TryParse(str,n)那么
'值小于0的陷阱
返回If(n<0,0,n)
'或:如果(n<0,0-n,n)返回
其他的
返回0
如果结束
端函数
给定一个段过大的字符串:
vstr=“1.4359733459374957394.6.7.8”
,结果是
“1.0.6.7”
。跳过第二个过大的值,并使用默认值0


对于
“1”
,结果为
“1.0.0.0”
;对于“Hello,World!”或任何其他非数字或空字符串,结果为
0.0.0

坏字符串中的实际字符串是什么?它看起来有空格或嵌入的东西。实际字符串应该是“产品版本”,但是,如果我使用“文件版本”,它没有空格,我会得到相同的错误。那么这是什么状态?