3

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

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

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

4

2 回答 2

5

这是一个 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       :
于 2015-02-24T16:15:33.937 回答
3

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

于 2011-03-11T15:39:54.907 回答