GetFileVersionInfo () возвращает неверную информацию о версии файла - PullRequest
3 голосов
/ 10 марта 2011

У меня есть приложение, которое требуется для проверки версий различных системных 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 "

Итак, для пояснения, версия c: \ windows \ system32 \ taskeng.exe, сообщаемая Windows Explorer, - 6.1.7600.16699.Версия c: \ windows \ system32 \ taskeng.exe, о которой сообщает GetFileVersionInfo (), - 6.1.7600.16385.

Как заставить мое приложение не перенаправлять свой файл через WinSxS?

Ответы [ 2 ]

4 голосов
/ 24 февраля 2015

Вот скрипт 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       :
3 голосов
/ 11 марта 2011

Вы уверены, что смотрите на правильные поля?GetFileVersionInfo () дает мне то же самое, что и Explorer с одним предупреждением: FileVersion в StringFileInfo - 6.1.7600.16385, тогда как FileVersion в VS_FIXEDFILEINFO - 6.1.7600.16699.Проводник показывает FileVersion из VS_FIXEDFILEINFO.Я думаю, что Microsoft просто не обновляла StringFileInfo по какой-то причине.

...