c#(.net7)/ powershell / explorer的不同版本信息

roejwanj  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(107)

目前,我有点困惑的版本,我可以通过native .net(C#),powershell和windows资源管理器。
正如你在屏幕截图中看到的,C#代码确定FileMajorPart=6和FileMinorPart=2。我预计至少主要版本10。为什么powershell显示正确的版本,即使使用相同的功能?
x1c 0d1x的数据
此外...看来,这只发生在一些特殊的文件.也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 for c#。
提前感谢您的问候,沃尔夫冈
我尝试使用不同的工具,如powershell / windows资源管理器。

gupuwyp2

gupuwyp21#

  • Windows系统API,* 根据情况 * 报告 * 遗留 * 信息,以实现向后兼容,特别是关于 * 操作系统版本 *。
  • 这似乎也适用于Windows* 附带的可执行文件和库的 * 文件版本信息 *,如记事本。
  • 需要注意的是,.NET System.Diagnostics.FileVersionInfo类型的.FileVersion.ProductVersion属性是“cooked”值,它 * 屏蔽 * 了遗留行为,但底层版本号组件单独属性(.FileMajorPar.FileMinorPart,...)确实报告了遗留值(如果适用)。
  • 这些API行为取决于查询应用程序是否具有application manifest,如果有,则取决于清单指定的Windows版本。
  • 具体来说,supportedOS元素的ID属性声明了兼容的Windows版本。
  • 缺少清单的情况下,应用程序会看到适用于Windows Vista 的旧值,即**6.2作为操作系统版本**。
  • Operating System Version显示了详细的Map。值得注意的是,在Windows 11 上仍然报告10.0
  • 发现给定应用程序的表现行为,请执行以下操作:
  • 启动应用程序并保持打开状态。
  • 启动任务管理器(taskmgr.exe)并切换到其Details视图(左侧边栏中的x1c 0d1x)
  • 右键单击列标题,单击“Select columns and add the Operating system context”列以查看(向下滚动直到看到它-列表 * 不 * 按名称排序)。
  • 您将看到以下内容:
  • (无值).该应用程序适用于Windows 10,Windows 11,Windows Server 2016,Windows Server 2019和Windows Server 2022(所有这些都使用 * 相同的 * 配置文件)。
  • Windows Vista.应用程序要么 * 没有 * manifest,要么是为Vista显式显示的。
  • Windows 8Windows 8.1.

您的屏幕截图暗示您正在使用的IDE没有应用程序清单,这解释了您看到的值。
请注意,Windows PowerShell(powershell.exe)和PowerShell (Core) 7+pwsh.exe)* 都 * 针对Windows 10+显示,这就是为什么您在PowerShell会话中运行(进程内)命令的输出中看到10.0值的原因。
这同样适用于类似于使用文件资源管理器GUI检查文件属性。

相关问题