首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Windows 11中找到Windows产品名称?

如何在Windows 11中找到Windows产品名称?
EN

Stack Overflow用户
提问于 2021-10-05 22:06:47
回答 4查看 4.8K关注 0票数 15

昨天发布的Windows 11几乎到处都是Windows10.0,RtlGetVersion说10.0,如果你问VerifyVersionInfo你是不是11.0或更高,它会说不。

似乎没有新的GUID可以插入app.manifest说“嗨,我支持Windows 11”,就像Windows 7、8、8.1和10那样。

目前,我依赖HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName来告诉我当前版本的Windows是什么,但是在我升级的机器上,它仍然是“Windows10Enterprise”,而不是“Windows11Enterprise”。

注册表中似乎只有一个包含文本"Windows 11“的位置,那就是BCD部分(引导配置),它也可以重命名,所以我不想碰它。

到目前为止,我只确定了几种方法来判断我是否运行在Windows 11上:

  1. 调用WMI查询Win32_OperatingSystem并检查Name属性,该属性简单地写着“Windows11”。这是不完整的(它不包括SKU,如“企业”),而且WMI相对比较慢,而且稍微脆弱,所以对于我的用例来说,它是一个不可接受的解决方案。

  1. 检查版本号,看看它是高于21996 (beta版)还是22000 (第一个公开版本)。如前所述,这将不包括SKU,为了构建完整的字符串,需要一些手动操作。

  1. 运行sysinfo并解析输出。这很慢,而且可能很脆弱(我还没有检查,但输出可能被本地化为不同的语言)。

  1. winver知道,但它是一个GUI应用程序,所以我不能确切地查询它,programmatically.

有没有人有其他的想法,如何使字符串"Windows 11 Enterprise“(或"Windows 11 Pro”等,视情况而定)从我的操作系统以一种性能和完整的方式?WMI,sysinfo和winver从哪里得到的?

我需要通过.NET库来实现这一点,但是P/调用/本机函数调用是可以接受的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2021-10-06 00:57:40

把这个留在这里好让我以后能找到它:

Windows本身(例如winver)似乎是从Windows品牌--特别是从%WinDir%\Branding\Basebrd\en-US\basebrd.dll.mui中的资源表--获得这些信息的。

要访问这个,可以使用%WinDir%\System32\winbrand.dll中的私有API。具体来说,函数BrandingFormatString接受一个宽字符串(LPWCSTR)并返回一个宽字符串。

例如,BrandingFormatString("%WINDOWS_LONG%")在我家的PC上返回"Windows 11 Pro"

我不知道结果字符串的生命周期语义,即是否/何时/如何释放它。

以下代码用作概念的功能证明(C# 9.0):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Runtime.InteropServices;

[DllImport("winbrand.dll", CharSet = CharSet.Unicode)]
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
static extern string BrandingFormatString(string format);

Console.WriteLine(BrandingFormatString("Hello World from %WINDOWS_LONG%!"));
票数 11
EN

Stack Overflow用户

发布于 2021-10-07 11:07:26

tldr -在注册表中使用EditionID和来自CurrentVersionCurrentBuild似乎是确定Win10与Win11和软件“版本”的可靠方法。EditionID在Windows10Pro和Windows11Pro上是“专业”的,CurrentBuild >= ~22000告诉您它是10还是11。

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion中的注册表值集合揭示了微软方面缺乏计划的感觉。有ReleaseId,它是随着每个Windows 10版本而变化的数字(例如,190319092004、.)直到最后一次更改Windows1020H2,在那里它更改为2009。同时,添加了DisplayVersion,并将其设置为20H2

然后Windows1021H1发布,ReleaseId莫名其妙地停留在2009上。

当前的Windows 10和Windows 11版本都可以具有相同的DisplayVersion (例如,在Windows1021H2即将发布时的21H2 )和ProductName (例如,Windows 10 Pro)。(谢谢@yaakov抓住我说的是21H1的错误。)

票数 3
EN

Stack Overflow用户

发布于 2021-12-22 16:38:07

下面的代码已经在Windows、7、10、11上进行了测试。它可以在32位和64位操作系统上工作。它在32位和64位应用程序中工作。

将生成以下字符串:

  • "Microsoft,Build 2600,32位“
  • ”Windows 7极限版,Build 7601,64位“
  • 2009版,版本1809,Build 17763,64位”
  • “Windows10Pro,版本1909,Build 18362,64位”
  • “Windows11Professional,版本21H2,Build 22000,64 bit”H 210F 211>

将代码放入静态构造函数,使其只执行一次,并将版本写入静态变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static String ms_OperatingSystem;

static Constructor()
{
    try
    {
        String s_KernelPath = Path.Combine(Environment.SystemDirectory,"Kernel32.dll");
        FileVersionInfo k_Kernel = FileVersionInfo.GetVersionInfo(s_KernelPath);

        // on 32 bit Windows this will read the 32 bit hive instead
        using (RegistryKey i_HKLM = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
        {
            using (RegistryKey i_RegVer = i_HKLM.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion", false))
            {
                // Kernel32.dll on Windows 11 has Product Version 10.0.22000.120
                if (k_Kernel.ProductMajorPart == 10 && k_Kernel.ProductBuildPart >= 22000)
                {
                    ms_OperatingSystem = "Windows 11";

                    Object o_Edition = i_RegVer.GetValue("EditionID"); // "Professional"
                    if (o_Edition is String)
                        ms_OperatingSystem += " " + o_Edition;
                }
                else
                {
                    // "Microsoft Windows XP"
                    // "Windows 7 Ultimate"
                    // "Windows 10 Pro"  (same string on Windows 11. Microsoft SUCKS!)
                    ms_OperatingSystem = (String)i_RegVer.GetValue("ProductName");
                }

                // See: https://en.wikipedia.org/wiki/Windows_10_version_history
                // Windows 10 older releases --> "2009" (invalid if DisplayVersion exists)
                Object o_ReleaseID = i_RegVer.GetValue("ReleaseId");

                // Windows 10 latest release --> "21H1"
                // Windows 11 first  release --> "21H2"
                Object o_DispVer = i_RegVer.GetValue("DisplayVersion");

                // Use ReleaseID ONLY if DisplayVersion does not exist in registry!
                     if (o_DispVer   is String) ms_OperatingSystem += ", Version " + o_DispVer;
                else if (o_ReleaseID is String) ms_OperatingSystem += ", Version " + o_ReleaseID;

                ms_OperatingSystem += ", Build " + k_Kernel.ProductBuildPart;

                if (Environment.Is64BitOperatingSystem) ms_OperatingSystem += ", 64 bit";
                else                                    ms_OperatingSystem += ", 32 bit";
            }
        }
     }
     catch (Exception Ex)
     {
        ms_OperatingSystem = Ex.Message;
     }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69460588

复制
相关文章
在restful api模式上使用JWT
在header头里面增加Authorization。在服务端验证的时候回通过取得这个值来验证回话的有效。
友儿
2022/09/11
8390
怎样使用React Context API [每日前端夜话0x26]
React Context API 【https://reactjs.org/docs/context.html】现在已经成为一个实验性功能,但是只有在 React 16.3.0 【https://reactjs.org/blog/2018/03/29/react-v-16-3.html】中才能用在生产中。本文将向你展示两个基本的 Web 商店应用程序,一个使用了 Context API 进行构建,另一个则不用。
疯狂的技术宅
2019/03/27
9330
怎样使用React Context API [每日前端夜话0x26]
在ListView上使用自定义的Adapter
需要实现的东西是: 一个DataListViewAdapter,当进行如下调用时,就能在列表上显示出数据:
LeoXu
2018/08/15
9670
使用Termux在Android上运行SSH服务器
借助出色的Termux终端仿真器应用程序,您可以在Android上运行SSH服务器。
用户5005176
2021/08/10
4.6K0
MySql在服务器上使用问题的总结
服务器是Windows Server 2012,我自己安装了一个MySql数据库,然后一个Web程序和客户端程序都想访问数据库,但是遇到一堆问题。主要是我仍然坚持使用.net 2.0,挂接MySql.Data 6.7.4版本。解决后记录一下
用户1075292
2023/05/03
1.1K0
MySql在服务器上使用问题的总结
使用nodejs编写api接口并部署到服务器上
1、安装node环境,没有就去看上一篇文章 2、创建一个node项目, 新建一个目录文件,例node_proxy 3、在新建的node项目执行npm init, 文件会生成一个package.json的文件 目录:
小吕
2022/06/16
8K0
使用nodejs编写api接口并部署到服务器上
Asp.net web api部署在某些服务器上老是404
asp.net web api部署在Windows服务器上后,按照WebAPI定义的路由访问,老是出现404,但定义一个静态文件从站点访问,却又OK。
guokun
2020/09/03
2.2K0
jira-api使用(上)
在jira操作中有些联动需求,例如需要查询一些数据并展示,在自带的筛选器中只能做单项操作,没法将多种查询进行自定义展示。通过API将查询结果进行自定义编排展示。
陈不成i
2021/07/05
9000
生产上还在使用GOLDENGATE HANDLECOLLISIONS
经常有朋友遇到ogg数据不一致或者遇到ogg replicate进程abend,比如1403错误之类,然后排除原因,大部分出现问题都是配置问题(少数情况下是bug),会造成业务统计数据不准或者涉及金额更麻烦(大库就比较麻烦,尤其报表库,主库数据都删除,报表数据不准了,最后pk吧),ogg虽然入门相对简单,使用这些参数之前,一定了解作用以及什么场景下适合使用。另外hanlecollisions与allownoopdates配合使用时候,allownoopdates作用失效.
徐靖
2020/08/05
8420
生产上还在使用GOLDENGATE HANDLECOLLISIONS
分享下 Backbone、Vue、Angular、React 在项目上的使用经验
上周,知乎上有几篇关于 Angular 和 Vue 对比的文章。本来想着的是,这些文章倒是可以指导下新手,作一些技术选型。可遗憾的是,开始的文章失去了一些偏颇,后面的文章则开始了一些攻击性行为。慢慢的,整个知乎上便是充满了一些戾气,开始了无尽的网络暴力。 于是,我想分享一下之前使用这些 MV* 框架的经验。 前端的摩尔时代 同样吧,在上周结束了《Expert Angular》的审校,这是第三本为 Packt 出版社审校的 Angular 的书。然后,先让我来讲个故事:一年前我开始审校的这本书,当时是基于 A
Phodal
2018/01/29
2.2K0
在以太坊上构建 GraphQL API
dapp[5]的数量继续爆炸性增长,对开发人员(使用 Solidity[6]或其他区块链语言的)的需求[7]也越来越大。
Tiny熊
2021/06/10
1.8K0
在以太坊上构建 GraphQL API
如何使用DevStack在Ubuntu服务器上安装OpenStack
OpenStack是专为云计算开发的自由开源平台。通过这个以云为中心的平台,虚拟机和其他资源可以作为基础设施即服务提供给客户。安装OpenStack有许多方法 - 有些方法更具挑战性。
星哥玩云
2022/07/13
1.8K0
如何使用DevStack在Ubuntu服务器上安装OpenStack
使用Flask在服务器实现一个API接口。
主要涉及到Python3、MySQL、Flask、Nginx、uwsgi这几个东西。
小F
2020/10/09
1.9K0
使用Flask在服务器实现一个API接口。
在JBOSS服务器上使用Myfaces的JSF实现
JBOSS AS服务器默认使用的JSF实现是SUN的RI,要把他替换成Myfaces需要:
EltonZheng
2021/01/22
8480
在 React 中使用 Storybook,构建强大的自定义 UI 组件
虽然像React这样的基于组件的UI库简化了web开发,但它们也引入了测试和调试等新的复杂性。
前端修罗场
2022/07/29
9.4K0
在 React 中使用 Storybook,构建强大的自定义 UI 组件
使用Autofac在ASP.NET Web API上实现依赖注入
【原文】 Dependency Injection with ASP.NET Web API and Autofac,以下为摘要: 在ASP.NET Web API里使用Autofac 通过NuGet安装Autofac.WebApi。(Nuget会安装依赖的Autofac.dll)。 PM > Install-Package Autofac.WebApi 引用如下命名空间。 using Autofac; using Autofac.Integration.WebApi; 代码配置Autofac 可参看ht
张善友
2018/01/30
1.5K0
使用 react Context API 的正确姿势
本文介绍一下 React 中常见的 Context API 的使用方式。在使用 Context API 之前,我们还需要知道为啥要使用。❓
JS菌
2019/04/10
1.6K0
使用 react Context API 的正确姿势
logistic回归:从生产到使用【上:使用篇】
logistic回归:从生产到使用【上:使用篇】 前面介绍过几个算法,如KNN、决策树等(在微信公众号“数说工作室”中回复“jrsj”查看,不要引号),都可以用若干个“属性变量”来预测一个“目标变量”
数说君
2018/03/28
1.4K0
logistic回归:从生产到使用【上:使用篇】
在Mac上搭建React Native开发环境
概述 前面我们介绍过在window环境下开发React Native项目,今天说说怎么在mac上搭建一个RN的开发环境。 配置mac开发环境 基本环境安装 1.先安装Homebrew:用于安装Node
xiangzhihong
2018/02/06
1.9K0
在Mac上搭建React Native开发环境
点击加载更多

相似问题

使用JNI从本机方法返回null

36

JNI -本机方法中的致命错误:传递给JNI的错误全局或本地引用。

12

JNI丢失了对本机方法的引用

21

如果没有在本机方法中创建本地引用,何时清除本地引用?

13

JNI本地与全局引用:不是有效的JNI引用

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文