找回密码
 加入
搜索
查看: 634|回复: 8

[网络通信] 【已解决,虽然不彻底】FileGetVersion 文件版本 BUG !

[复制链接]
发表于 2022-7-25 20:15:49 | 显示全部楼层 |阅读模式
本帖最后由 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 官网一直到现在也不管吗?!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2022-7-25 20:27:47 | 显示全部楼层
本帖最后由 chishingchan 于 2022-7-25 20:30 编辑

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

获取的信息是完全空白!

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2022-7-25 20:47:33 | 显示全部楼层
用 _WinAPI_VerQueryValue 试试
 楼主| 发表于 2022-7-25 21:29:17 | 显示全部楼层
afan 发表于 2022-7-25 20:47
用 _WinAPI_VerQueryValue 试试



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2022-7-25 21:40:16 | 显示全部楼层
chishingchan 发表于 2022-7-25 21:29
好像也不行!第4列与第10列是相同的!

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

譬如:人要适应于社会,社会不懂得适应于人。
同理:Windows 这平台就比如是社会,AutoIt3 就是个人。
获取的方式也好、什么也好,总得要适用于 Windows。
这个问题如果 a 大也没法解决,那我就断定这是一个 BUG!
谁会提交 BUG,让官方去解决吧!谢谢!
发表于 2022-7-27 12:28:27 | 显示全部楼层
上次不是说过了么?不要加参数就行了
GUICtrlSetData($FileVersion, FileGetVersion(GUICtrlRead($InputFile)) )

点评

请看看2#怎么个说法,谢谢!  发表于 2022-7-28 08:51

评分

参与人数 2金钱 +70 贡献 +1 收起 理由
chishingchan + 50 赞一个!
afan + 20 + 1 赞一个!

查看全部评分

发表于 2022-7-27 13:09:50 | 显示全部楼层
lin6051 发表于 2022-7-27 12:28
上次不是说过了么?不要加参数就行了
GUICtrlSetData($FileVersion, FileGetVersion(GUICtrlRead($InputFil ...

确实如此,不加参数可以获取正常数值。但这与 FileVersion 参数获取的不同就说不过去了,让人疑问,以哪个为准……
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-27 14:09 , Processed in 0.081114 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表