我有一个应用程序需要检查各种系统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重定向其文件?
答案 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。