首页 > 解决方案 > 获取命令和版本号

问题描述

我需要通过查看 EXE 文件来检查是否安装了程序。一些愚蠢的程序表现不佳,并将合理的信息放在注册表中。我有Get-Command $path工作,它允许我将版本信息作为属性获取,这也很好。但是,我想做一些验证,确保文件是有效文件。所以我尝试获取一个 TXT 文件并将扩展名更改为 EXE,并且预计Get-Command会引发异常。但不,它工作正常,只报告0.0.0.0. 当我手动查看真实 EXE 和假 EXE 的属性时,我看到它们File versionProduct version作为属性存在,但都是空的。我没有将版本值转换为[version]或任何东西,所以看起来 Windows 本身插入了一个值0.0.0.0当它为空时,这......糟透了。这是我真正可以依赖的东西吗?没有真正的可执行文件将具有0.0.0.0版本值,并相应地将其报告为错误文件?或者是0.0.0.0某人可能实际使用的有效版本号?

标签: powershell

解决方案


0.0.0.0技​​术上是一个有效的版本号,但我会说可执行文件不太可能明确使用它。

务实地说,因此您可以从这个版本号的存在推断给定的可执行文件不包含嵌入式版本资源

$hasVersionResource = (Get-Command some.exe).Version.ToString() -ne '0.0.0.0'

但是,这方面与给定文件是否是有效(二进制)可执行文件(即它是否可以实际运行)是分开的:二进制文件不需要此资源即可执行。


推荐阅读