chishingchan 发表于 2022-7-25 20:15:49

【已解决,虽然不彻底】FileGetVersion 文件版本 BUG !

本帖最后由 chishingchan 于 2022-7-28 19:04 编辑

搜索帖子,最早是 2009 年就有人提问!可能是碰巧,文件版本与产品版本相同就没有下文被结贴了!

一直到如今,这个 BUG 其实仍然存在!不用不知道,用到这个函数时就发现出问题了!

在 XP 时,文件属性显示有公司名称,在 7 时就没有了,看下图:

在编辑 Inno Setup 脚本时往往需要获取三项文件信息,看下面代码及下图:
所以就写了这个 FileInfo.au3
Local $Width = 480
Local $Height = 100

GUICreate("可执行文件版本信息", $Width, $Height, @DesktopWidth - $Width - 8, 4, -1, BitOR(16+8, 256+8))

Local $InputBrowse = GUICtrlCreateButton("浏览(&B)", 8, 10, 52, 20)
$InputFile = GUICtrlCreateInput("", 70, 12, 400, 16)
GUICtrlSetState(-1, 8)
GUICtrlCreateLabel("合法版权", 10, 34)
$LegalCopyright = GUICtrlCreateInput("", 70, 32, 400, 16)
GUICtrlCreateLabel("公司名称", 10, 54)
$CompanyName = GUICtrlCreateInput("", 70, 52, 400, 16)
GUICtrlCreateLabel("文件版本", 10, 74)
$FileVersion = GUICtrlCreateInput("", 70, 72, 400, 16)

GUISetState(@SW_SHOW)

While 1
      If FileExists(GUICtrlRead($InputFile)) Then
                GUICtrlSetData($LegalCopyright, FileGetVersion(GUICtrlRead($InputFile), "LegalCopyright"))
                GUICtrlSetData($CompanyName, FileGetVersion(GUICtrlRead($InputFile), "CompanyName"))
                GUICtrlSetData($FileVersion, FileGetVersion(GUICtrlRead($InputFile), "FileVersion"))
                Local $IS = "AppCopyright=" & GUICtrlRead($LegalCopyright) & @CRLF & "AppPublisher=" & GUICtrlRead($CompanyName) & @CRLF & "VersionInfoVersion=" & GUICtrlRead($FileVersion)
                ClipPut($IS)
      EndIf
      Switch GUIGetMsg()
                Case -3
                        ExitLoop
                Case $InputBrowse
                        GUICtrlSetData($InputFile, FileOpenDialog("请选择一个可执行文件。", @WindowsDir & "\", "可执行文件 (*.exe)", 1))
      EndSwitch
WEnd


这个 文件版本 的结果是不对的,其实是 产品版本!这个 BUG 官网一直到现在也不管吗?!

chishingchan 发表于 2022-7-25 20:27:47

本帖最后由 chishingchan 于 2022-7-25 20:30 编辑

除了上述的 Bug,估计还有,看图:

获取的信息是完全空白!

注:此文件不方便为附件!

afan 发表于 2022-7-25 20:47:33

用 _WinAPI_VerQueryValue 试试

chishingchan 发表于 2022-7-25 21:29:17

afan 发表于 2022-7-25 20:47
用 _WinAPI_VerQueryValue 试试



好像也不行!第4列与第10列是相同的!

afan 发表于 2022-7-25 21:40:16

chishingchan 发表于 2022-7-25 21:29
好像也不行!第4列与第10列是相同的!

可能exe文件本身设置版本信息有问题。
不过,系统的属性版本信息与au3获取的方式肯定还是有差异

chishingchan 发表于 2022-7-26 15:58:26

afan 发表于 2022-7-25 21:40
可能exe文件本身设置版本信息有问题。
不过,系统的属性版本信息与au3获取的方式肯定还是有差异

譬如:人要适应于社会,社会不懂得适应于人。
同理:Windows 这平台就比如是社会,AutoIt3 就是个人。
获取的方式也好、什么也好,总得要适用于 Windows。
这个问题如果 a 大也没法解决,那我就断定这是一个 BUG!
谁会提交 BUG,让官方去解决吧!谢谢!

lin6051 发表于 2022-7-27 12:28:27

上次不是说过了么?不要加参数就行了
GUICtrlSetData($FileVersion, FileGetVersion(GUICtrlRead($InputFile)) )

afan 发表于 2022-7-27 13:09:50

lin6051 发表于 2022-7-27 12:28
上次不是说过了么?不要加参数就行了
GUICtrlSetData($FileVersion, FileGetVersion(GUICtrlRead($InputFil ...

确实如此,不加参数可以获取正常数值。但这与 FileVersion 参数获取的不同就说不过去了,让人疑问,以哪个为准……
页: [1]
查看完整版本: 【已解决,虽然不彻底】FileGetVersion 文件版本 BUG !