powershell - 获取命令和版本号
问题描述
我需要通过查看 EXE 文件来检查是否安装了程序。一些愚蠢的程序表现不佳,并将合理的信息放在注册表中。我有Get-Command $path
工作,它允许我将版本信息作为属性获取,这也很好。但是,我想做一些验证,确保文件是有效文件。所以我尝试获取一个 TXT 文件并将扩展名更改为 EXE,并且预计Get-Command
会引发异常。但不,它工作正常,只报告0.0.0.0
. 当我手动查看真实 EXE 和假 EXE 的属性时,我看到它们File version
都Product version
作为属性存在,但都是空的。我没有将版本值转换为[version]
或任何东西,所以看起来 Windows 本身插入了一个值0.0.0.0
当它为空时,这......糟透了。这是我真正可以依赖的东西吗?没有真正的可执行文件将具有0.0.0.0
版本值,并相应地将其报告为错误文件?或者是0.0.0.0
某人可能实际使用的有效版本号?
解决方案
0.0.0.0
在技术上是一个有效的版本号,但我会说可执行文件不太可能明确使用它。
务实地说,因此您可以从这个版本号的存在推断给定的可执行文件不包含嵌入式版本资源。
$hasVersionResource = (Get-Command some.exe).Version.ToString() -ne '0.0.0.0'
但是,这方面与给定文件是否是有效(二进制)可执行文件(即它是否可以实际运行)是分开的:二进制文件不需要此资源即可执行。
推荐阅读
- docker - 当主机不正常关闭时,docker 容器中的文件会发生什么?
- reactjs - 使用 react-testing-library 在 react-window 列表中测试滚动
- javascript - 如何在 DataTables 中显示附加到行组 ligne 的子表?
- css - 如何遍历css中的x个项目?
- c# - 正则表达式改进 AssemblyVersion.cs
- flutter - 当小部件不可见时选项卡正在移动
- visual-studio-code - 无法在 Visual Studio Code 的 Notebook 中进行绘图导入
- r - 从具有概率 [r] 的向量生成伯努利变量
- c++ - 在函数中使用 Lambda 作为参数
- bluetooth-lowenergy - 通过 thingsboard-gateway 的 BLE 遥测数据未在 thingsboard 中更新