【问题标题】:System.Environment.OSVersion returns wrong versionSystem.Environment.OSVersion 返回错误的版本
【发布时间】:2016-01-24 13:09:37
【问题描述】:

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

OperatingSystem os = System.Environment.OSVersion;

os.Version = {6.2.9200.0} System.Version

我读到这是因为它是 manifested for 的版本,但我不明白这是什么意思。

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    除非您使用清单声明您的应用程序兼容,否则 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 版本

    【讨论】:

    • 谢谢,这适用于调试编译,但是当我编译发布时它仍然返回 Windows 8.1 版本。 “新台币 6.2”。我错过了什么?
    • @pgee70 仅此而已。我试过了,它在发布和调试中都有效。只需确保它是您正在部署的正确 exe,并且在“应用程序”选项卡的项目配置中包含正确的清单,如您所见 here
    • 知道如何为 .net core 执行此操作吗?
    • 在仅 Windows 的应用程序中,使用 Visual Studio 添加清单很容易。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 工作就像一个魅力
    【解决方案3】:

    试试:

    new ComputerInfo().OSVersion;

    输出:

    Microsoft Windows 10 企业版

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

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

    【讨论】:

      【解决方案4】:

      另一种选择是

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

      需要Microsoft.DotNet.PlatformAbstractions NuGet 包参考

      【讨论】:

        猜你喜欢
        • 2018-08-07
        • 1970-01-01
        • 2013-01-06
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-22
        相关资源
        最近更新 更多