- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想识别操作系统,但不是通过 String
来识别,因为我想将其映射为 ID。解决这个问题的几种方法,所以我的问题是:
有没有人列出所有可能的答案?
var name = (from x in new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType<System.Management.ManagementObject>()
select x.GetPropertyValue("Caption")).FirstOrDefault();
或者,是否有一种方法可以根据任何其他字段反向查找 Caption
字段?
通过查看 https://msdn.microsoft.com/en-us/library/windows/desktop/aa394239(v=vs.85).aspx似乎没有足够的信息来从所有其他属性重新创建 Caption
。
这是我机器上的这个结果的示例:
BootDevice: \Device\HarddiskVolume1
BuildNumber: 10586
BuildType: Multiprocessor Free
Caption: Microsoft Windows 10 Pro N
CodeSet: 1252
CountryCode: 1
CreationClassName: Win32_OperatingSystem
CSCreationClassName: Win32_ComputerSystem
CSDVersion:
CSName: DESKTOP-6UJPPDS
CurrentTimeZone: 120
DataExecutionPrevention_32BitApplications: True
DataExecutionPrevention_Available: True
DataExecutionPrevention_Drivers: True
DataExecutionPrevention_SupportPolicy: 2
Debug: False
Description:
Distributed: False
EncryptionLevel: 256
ForegroundApplicationBoost: 2
FreePhysicalMemory: 2027936
FreeSpaceInPagingFiles: 4486600
FreeVirtualMemory: 2611432
InstallDate: 20151223101608.000000+120
LargeSystemCache:
LastBootUpTime: 20160215101020.112003+120
LocalDateTime: 20160225114508.446000+120
Locale: 0409
Manufacturer: Microsoft Corporation
MaxNumberOfProcesses: 4294967295
MaxProcessMemorySize: 137438953344
MUILanguages: System.String[]
Name: Microsoft Windows 10 Pro N|C:\WINDOWS|\Device\Harddisk0\Partition2
NumberOfLicensedUsers: 0
NumberOfProcesses: 157
NumberOfUsers: 2
OperatingSystemSKU: 49
Organization:
OSArchitecture: 64-bit
OSLanguage: 1033
OSProductSuite: 256
OSType: 18
OtherTypeDescription:
PAEEnabled:
PlusProductID:
PlusVersionNumber:
PortableOperatingSystem: False
Primary: True
ProductType: 1
RegisteredUser: developer
SerialNumber: 00332-00331-71784-AA054
ServicePackMajorVersion: 0
ServicePackMinorVersion: 0
SizeStoredInPagingFiles: 4637884
Status: OK
SuiteMask: 272
SystemDevice: \Device\HarddiskVolume2
SystemDirectory: C:\WINDOWS\system32
SystemDrive: C:
TotalSwapSpaceSize:
TotalVirtualMemorySize: 12910660
TotalVisibleMemorySize: 8272776
Version: 10.0.10586
WindowsDirectory: C:\WINDOWS
再一次,该链接不够详细,因为 Google 告诉我 OperatingSystemSKU
有超过 26 个项目,而我发现有 49 个甚至 103 个。
另一种方法是使用 Environment.OSVersion
,但我认为它比我看到的还要糟糕。
所以我要么为某种形式的查找构建一个表,要么我反向查找现有的内部库。
我目前的解决方案是获取操作系统版本并交叉引用我从 https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions 制作的列表
更新:出于带宽考虑,我不想向我的 API 发送带有操作系统名称的字符串,而是发送一个唯一的 ID,我可以通过反向查找从该 ID 检索操作系统。
我目前正在动态构建这个数据库,使用操作系统的字符串值,然后每隔一段时间使用一个 ID。
如果我有 Win32_OperatingSystem
的一些其他字段并假设客户端和服务器端都有最新的 dll,我想要一个可以检索 Caption
字段的解决方案/SDK。
TIA
最佳答案
as I've found 49 or even 103
很好地解决了这个问题。你落后了,现在是 121。版本 10.0.10586 中的最新成员是 Windows 全息影像,您戴在头上的那个。
secret 解码器环存储在 WinNT.h SDK 头文件中,它包含 PRODUCT_Xxxxx 声明。你的是 49 == 0x31 == PRODUCT_PROFESSIONAL_N。 N 版本特定于欧盟和瑞士,是迫使 Microsoft 不再部署 Windows Media Player 的和解协议(protocol)的一部分。获取最新的 SDK 版本以获取最新列表很重要。我查看了大约 3 个月前发布的 C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\um\winnt.h。
Windows 版本的数量一直在快速增长,即使微软 promise 不会很快推出 Windows 11 版本,这一速度也不太可能平息。工具是 MinWin project ,它打破了操作系统 DLL 之间的相互依赖关系。这使得构建具有经过调整的部件组合的 Windows 版本变得非常非常容易。 Server Core 是该项目的第一个众所周知的受益者。 Windows IoT(在小型微型计算机上运行)最近引起了一些轰动。
这种扩散的一个非常明显的牺牲品是版本检查变得毫无用处。它不再告诉您可以在代码中做什么。微软也没有一种实用的方法来部署使旧程序与新 Windows 版本兼容的 appcompat 填充程序。顺便说一句,这是一项艰巨的任务,必须验证数以万计的常用程序是很痛苦的。将其乘以定制构建的数量,如 Holographic,以及政治和营销激发的各种版本(如 N、KN、E、V、S、A、EM),你可以想象这不是你想要解决的问题要么自己解决。
还要注意 Environment.OSVersion 的行为,还有像 GetWindowsVersionEx() 这样的 winapi 函数,今天的操作系统只是骗了你,并返回 6.3 版。 Windows 8.1 的版本号。关闭该谎言需要更改 EXE 文件头中的目标子系统版本。 .NET 编译器过去将其设置为 4.0,如果您的目标框架版本为 4.5 或更高版本(将无法在 XP 或 Server2003 上运行),则设置为 6.0。您必须将其更改为 10.0。背景 is here .先有鸡还是先有蛋的问题是有意为之的。
Microsoft 希望今天每个人都能通过代码中“基于能力”的检查来处理这个问题。如果它失败是因为操作系统中缺少一个子功能,那么你应该优雅地失败,这样用户就可以发现他的版本不够好。所以非常不是您正在尝试做的事情。
关于c# - 通过id识别系统操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624565/
我有这个代码: System.err.print("number of terms = "); System.out.println(allTerms.size()); System.err
我有以下问题:在操作系统是 Linux 的情况下和在操作系统是 MacOs 的情况下,我必须执行不同的操作。 所以我创建了以下 Ant 脚本目标: /u
我正在调用 system("bash ../tools/bashScript\"This is an argument!\"&"),然后我正在调用 close(socketFD) 直接在 system
使用最初生成的随机元素来约束随机数组的连续元素是否有效。 例如:我想生成一组 10 个 addr、size 对来模拟典型的内存分配例程并具有如下类: class abc; rand bit[5:0
我正在创建一个必须使用system(const char*)函数来完成一些“繁重工作”的应用程序,并且我需要能够为用户提供粗略的进度百分比。例如,如果操作系统正在为您移动文件,它会为您提供一个进度条,
我即将编写一些项目经理、开发人员和业务分析师会使用的标准/指南和模板。目标是更好地理解正在开发或已经开发的解决方案。 其中一部分是提供有关记录解决方案的标准/指南。例如。记录解决/满足业务案例/用户需
在开发使用压缩磁盘索引或磁盘文件的应用程序时,其中部分索引或文件被重复访问(为了论证,让我们说一些类似于 Zipfian 分布的东西),我想知道什么时候足够/更好地依赖操作系统级缓存(例如,Debia
我们编写了一个 powershell 脚本,用于处理来自内部系统的图像并将其发送到另一个系统。现在,业务的另一部分希望加入其中,对数据进行自己的处理,并将其推送到另一个系统。打听了一下,公司周围有几个
我正在尝试朗姆酒我的应用程序,但我收到以下错误:System.Web.HttpUnhandledException:引发了“System.Web.HttpUnhandledException”类型的异
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
所以我在其他程序中没有收到此错误,但我在这个程序中收到了它。 这个程序是一个我没有收到错误的示例。 #include int main() { system("pause"); } // en
我在 c# System.URI.FormatExption 中遇到问题 为了清楚起见,我使用的是 Segseuil 的 Matlab 方法,并且它返回一个图片路径 result。我想为其他用户保存此
我正在尝试像这样设置文本框的背景色: txtCompanyName.BackColor = Drawing.Color.WhiteSmoke; 它不喜欢它,因为它要我在前面添加系统,例如: txtCo
请帮助我解决 System.StackOverflowException我想用 .aspx 将记录写入数据库我使用 4 层架构来实现这一切都正常但是当我编译页面然后它显示要插入数据的字段时,当我将数据
我使用了一些通常由系统调用的API。 因此,我将 android:sharedUserId="android.uid.system" 添加到 manifest.xml, 并使用来自 GIT 的 And
我正在尝试创建一个小型应用程序,它需要对/system 文件夹进行读/写访问(它正在尝试删除一个文件,并创建一个新文件来代替它)。我可以使用 adb 毫无问题地重新挂载该文件夹,如果我这样做,我的应用
我想从没有 su 的系统 priv-app 将/system 重新挂载为 RW。如何以编程方式执行此操作?只会用 Runtime.getruntime().exec() 执行一个 shell 命令吗
我正在尝试制作一个带有登录系统的程序我对此很陌生,但我已经连续工作 8 个小时试图解决这个问题。这是我得到的错误代码 + ServerVersion 'con.ServerVersion' threw
当我“构建并运行”Code::Blocks 中的程序时,它运行得非常好!但是当我从“/bin”文件夹手动运行它时,当它试图用 system() 调用“temp.bat”时,它会重置。这是为什么?它没有
我想使用 system/pipe 命令来执行具有特殊字符的命令。下面是示例代码。通过系统/管道执行命令后,它通过改变特殊字符来改变命令。我很惊讶地看到系统命令正在更改作为命令传递的文本。 run(ch
我是一名优秀的程序员,十分优秀!