GetFileVersionInfo()返回错误文件的版本信息

时间:2011-03-10 18:20:55

标签: winapi winsxs

我有一个应用程序需要检查各种系统EXE和DLL的版本,以确定它们是否易受攻击。这是一个本机C ++应用程序,它的清单中没有提供任何特定的WinSxS链接。在Windows 7上,当我在绝对路径上调用GetFileVersionInfo时,例如“c:\ windows \ system32 \ taskeng.exe”,我收到“C:\ Windows \ winsxs \ x86_microsoft-windows-taskscheduler-engine_31bf3856ad364e35_6”的版本信息。 1.7600.16385_none_e582a352202e02c8 \ taskeng.exe“

因此,澄清一下,Windows资源管理器报告的版本c:\ windows \ system32 \ taskeng.exe是6.1.7600.16699。 GetFileVersionInfo()报告的c:\ windows \ system32 \ taskeng.exe版本为6.1.7600.16385。

如何强制我的应用程序不通过WinSxS重定向其文件?

2 个答案:

答案 0 :(得分:4)

这是一个显示差异的PowerShell脚本。 FileVersion是一个不同于[FileMajorPart]的组合的字符串。[FileMinorPart]。[FileBuildPart]。[FilePrivatePart]。

PS C:\> [System.Diagnostics.FileVersionInfo]::GetVersionInfo("c:\windows\system32\taskeng.exe") | Format-List -property *


Comments           :
CompanyName        : Microsoft Corporation
FileBuildPart      : 7601
FileDescription    : Task Scheduler Engine
FileMajorPart      : 6
FileMinorPart      : 1
FileName           : c:\windows\system32\taskeng.exe
FilePrivatePart    : 17514
FileVersion        : 6.1.7600.16385 (win7_rtm.090713-1255)
InternalName       : TaskEng
IsDebug            : False
IsPatched          : False
IsPrivateBuild     : False
IsPreRelease       : False
IsSpecialBuild     : False
Language           : English (United States)
LegalCopyright     : © Microsoft Corporation. All rights reserved.
LegalTrademarks    :
OriginalFilename   : taskeng.exe.mui
PrivateBuild       :
ProductBuildPart   : 7601
ProductMajorPart   : 6
ProductMinorPart   : 1
ProductName        : Microsoft® Windows® Operating System
ProductPrivatePart : 17514
ProductVersion     : 6.1.7600.16385
SpecialBuild       :

答案 1 :(得分:3)

您确定要查看正确的字段吗? GetFileVersionInfo()给出了与Explorer相同的一点警告:StringFileInfo中的FileVersion是6.1.7600.16385,而VS_FIXEDFILEINFO中的FileVersion是6.1.7600.16699。 Explorer正在显示VS_FIXEDFILEINFO中的FileVersion。我想微软只是因为某种原因没有更新StringFileInfo。