System.Environment.OSVersion 返回错误版本

问题描述 投票:0回答:5

使用 Windows 10,从 Windows 8 => 8.1 => 10 升级当我使用此代码时。

OperatingSystem os = System.Environment.OSVersion;

os.Version = {6.2.9200.0} System.Version

我读到此内容是因为它所显示的版本,但我不明白这意味着什么。

我想要正确的操作系统版本,因为我正在 Web 服务上记录用户代理字符串,并且想要正确识别 Windows 版本以获得支持。正确报告正确版本的最简单方法是什么?

c#
5个回答
45
投票

Windows 10 会返回该字符串,除非您使用清单声明您的应用程序兼容。为此,添加

app.manifest
(右键单击您的项目 -> 添加 -> 新项目 -> 应用程序清单文件),然后取消注释以下行:

<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

您可以对 Windows Vista 到 Windows 10 执行相同的操作。所有内容都在同一部分中:

<application>
  <!-- A list of the Windows versions that this application has been tested on and is
       is designed to work with. Uncomment the appropriate elements and Windows will 
       automatically selected the most compatible environment. -->

  <!-- Windows Vista -->
  <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->

  <!-- Windows 7 -->
  <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->

  <!-- Windows 8 -->
  <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->

  <!-- Windows 8.1 -->
  <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->

  <!-- Windows 10 -->
  <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

</application>

现在,当您运行应用程序时,它将报告正确的 10.0.*.0 版本


2
投票

Nasreddine 给出的步骤序列会将清单文件添加到您的项目中。

还有另一种添加清单的方法。 右键单击项目 > 属性 > 应用程序选项卡 > 查看 Windows 设置 这将显示默认清单,您可以对其进行编辑。我正在使用 Visual Studio 2010 Express。从其他阅读来看,方法应该类似。

对于使用非 Windows 组件的项目(我使用 VB.Net 在 ESRI arc-objcet 中进行编程),似乎无法添加清单文件。查看窗口设置 按钮被禁用。 Nasreddine 给出的步骤确实添加了一个可以编辑的清单文件,但不能将其合并到项目中。 我尝试了很多技巧:比如添加为资源(嵌入和非嵌入),将其添加到 obj > debug 文件夹。

最关键的测试是我设置了一个纯 Windows 项目,获得了一个 windows 按钮命令来返回正确的版本字符串(添加清单后),然后尝试添加一个非 Windows 组件(ESRI Addin)。失败并显示错误消息。

我只是想识别操作系统,因为所需文件的文件位置取决于操作系统。希望这可以帮助其他人避免陷入这个兔子洞。


2
投票

另一种选择是

Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment.OperatingSystem + " " + Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment.OperatingSystemVersion

Microsoft.DotNet.PlatformAbstractions 需要 NuGet 包参考


0
投票

对于 dotnet 5.0 及以上版本, System.Environment.OSVersion 可以返回正确的操作系统版本。


-1
投票

尝试:

new ComputerInfo().OSVersion;

输出:

Microsoft Windows 10 企业版

注意: 添加对 Microsoft.VisualBasic.Devices 的引用;

感谢https://stackoverflow.com/a/39888998/6629672

© www.soinside.com 2019 - 2024. All rights reserved.