提问人:0xdeadbeef 提问时间:11/16/2023 最后编辑:mklement00xdeadbeef 更新时间:11/17/2023 访问量:68
c# (.net7) / powershell / explorer 的不同版本信息
Different version information of c# (.net7) / powershell / explorer
问:
目前,我对通过本机 .NET (C#)、PowerShell 和 Windows 资源管理器获得的版本有点困惑。
如屏幕截图所示,C# 代码确定 FileMajorPart=6 和 FileMinorPart=2。我至少检查了主要版本 10。为什么即使使用相同的功能,powershell 也会显示正确的版本?
也。。。似乎这只发生在一些特殊文件中。此外,calc.exe 显示错误的版本。其他 .exe 文件正确显示。
C#:
using System.Diagnostics;
FileVersionInfo test = FileVersionInfo.GetVersionInfo(@"c:\windows\system32\notepad.exe");
结果:
- test {File: c:\windows\system32\notepad.exe
InternalName: Notepad
OriginalFilename: NOTEPAD.EXE.MUI
FileVersion: 10.0.19041.1 (WinBuild.160101.0800)
FileDescription: Editor
Product: Betriebssystem Microsoft® Windows®
ProductVersion: 10.0.19041.1
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language: Deutsch (Deutschland)
} System.Diagnostics.FileVersionInfo
...
FileMajorPart 6 int
FileMinorPart 2 int
FileName "c:\\windows\\system32\\notepad.exe" string
FilePrivatePart 3636 int
FileVersion "10.0.19041.1 (WinBuild.160101.0800)" string
...
ProductBuildPart 19041 int
ProductMajorPart 10 int
ProductMinorPart 0 int
ProductName "Betriebssystem Microsoft® Windows®" string
ProductPrivatePart 3636 int
ProductVersion "10.0.19041.1" string
SpecialBuild "" string
Powershell:
PS C:\> [System.Diagnostics.FileVersionInfo]::GetVersionInfo("c:\windows\system32\notepad.exe") | fl *
FileVersionRaw : 10.0.19041.3636
ProductVersionRaw : 10.0.19041.3636
Comments :
CompanyName : Microsoft Corporation
FileBuildPart : 19041
FileDescription : Editor
FileMajorPart : 10
FileMinorPart : 0
FileName : c:\windows\system32\notepad.exe
FilePrivatePart : 3636
FileVersion : 10.0.19041.1 (WinBuild.160101.0800)
InternalName : Notepad
IsDebug : False
IsPatched : False
IsPrivateBuild : False
IsPreRelease : False
IsSpecialBuild : False
Language : Deutsch (Deutschland)
LegalCopyright : © Microsoft Corporation. Alle Rechte
vorbehalten.
LegalTrademarks :
OriginalFilename : NOTEPAD.EXE.MUI
PrivateBuild :
ProductBuildPart : 19041
ProductMajorPart : 10
ProductMinorPart : 0
ProductName : Betriebssystem Microsoft® Windows®
ProductPrivatePart : 3636
ProductVersion : 10.0.19041.1
SpecialBuild :
你知道为什么会发生这种情况吗?
我正在将 .net 7.0 用于 c#。
提前感谢您和问候, 沃尔夫冈
我尝试使用不同的工具,如 powershell / windows 资源管理器。
答:
为了向后兼容,有些 Windows 系统 API 会根据情况报告遗留信息,尤其是在操作系统版本方面。
这似乎也适用于 Windows 附带的可执行文件和库(如记事本)的文件版本信息。
需要注意的是,.NET
System.Diagnostics.FileVersionInfo
类型的 和 属性是掩盖旧行为的“熟”值,但基础版本号组件单个属性 (, , ...) 会报告旧值(如果适用)。.FileVersion
.ProductVersion
.FileMajorPar
.FileMinorPart
这些 API 的行为取决于查询应用程序是否具有应用程序清单,如果有,则取决于该清单指定的 Windows 版本。
具体而言,它是声明兼容 Windows 版本的
supportedOS
元素的属性。ID
在没有清单的情况下,应用程序会看到应用于 Windows Vista 的旧值,即
6.2
作为操作系统版本。操作系统版本显示详细映射。值得注意的是,在 Windows 11 上,报告的仍然是
10.0
。
要发现给定应用程序的显现行为,请执行以下操作:
- 启动应用程序并使其保持打开状态。
- 启动任务管理器 () 并切换到其视图(在左侧边栏中)
taskmgr.exe
Details
- 右键单击列标题,单击视图的“选择列操作系统上下文”列(向下滚动直到看到它 - 列表未按名称排序)。
and add the
- 您将看到以下内容:
- (没有值)......该应用程序针对 Windows 10、Windows 11、Windows Server 2016、Windows Server 2019 和 Windows Server 2022 (对所有 GUID ) 进行清单。
Windows Vista
...应用程序没有清单,或者已显式为 Vista 显现。Windows 8
, ...应用程序已针对这些版本显式显示。Windows 8.1
您的屏幕截图表明您正在使用的 IDE 没有应用程序清单,这解释了您看到的值。
请注意,Windows PowerShell () 和 PowerShell (Core) 7+ () 都针对 Windows 10+ 进行了体现,这就是为什么你在 PowerShell 会话中运行的命令(进程内)的输出中看到值的原因。powershell.exe
pwsh.exe
10.0
这同样适用于使用文件资源管理器 GUI 检查文件属性。
评论