2016-02-25 14 views
5

私はIDとしてマップしたいので、Stringではなく、OSを特定したいと思います。このついて行くの いくつかの方法なので、私の質問は次のとおりです。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は私が49かを見つけたようOperatingSystemSKUは、26個の以上のアイテムを持っていることを私に告げるよう再度そのリンクは、十分に冗長ではありませんでも103

もう一つのルートはEnvironment.OSVersionであるが、私はそれが私が探していたものよりもさらに悪いことだと思います。

だから私は、ルックアップのいくつかのフォームのためにテーブルを作成、または私は既存の内部ライブラリを検索逆のいずれか。

私の現在のソリューションは、OSのバージョンと相互参照私がhttps://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versionsから作られたリストを取得することです

更新: 代わりに私のAPIに、OS名の文字列を送信する、帯域幅の懸念のために、私はIDからOSを取得するためにルックアップを逆にすることができるユニークなIDを送信したい。

私は現在、他のすべての時間を、動的にこのデータベースを構築するOSの文字列値を使用して、その後、IDです。

Win32_OperatingSystemのフィールドがあり、クライアントとサーバーの両方に最新のdlls/SDKがあると仮定して、Captionフィールドを取得できるソリューションを希望します。

TIA

答えて

18

私はかなりよく問題ダウン49本のあるいは103

釘を見つけたよう。あなたは遅れており、今は121です。バージョン10.0.10586の最新バージョンはWindows Holographicです。あなたが頭に着用しているものです。

秘密デコーダリングがWINNT.H SDKヘッダーファイルに格納され、それはPRODUCT_Xxxxx宣言を含んでいます。あなたは49 == 0x31 == PRODUCT_PROFESSIONAL_Nです。 N版はEUとスイスに特有のもので、和解の一部で、MicrosoftはWindows Media Playerを展開しなくなった。最新のSDKバージョンを取得して最新のリストを取得することが重要です。約3ヶ月前にリリースされたC:¥Program Files(x86)¥Windows Kits¥10¥Include¥10.0.10586.0¥um¥winnt.hを見ました。

Windowsバージョンの数は、MicrosoftがWindowsのバージョンまもなく11いつでもそこにいないだろうと約束していても、すぐに治まるにくい率を爆発されています。 InstrumentalはMinWin projectであり、オペレーティングシステムDLL間の依存関係が壊れていました。これにより、さまざまな部分が混在したWindowsビルドを構築するのがずっと簡単になりました。 Server Coreは、このプロジェクトの最初の有名な受益者でした。 WindowsのIoT(小規模のマイクロ上で動作する)は遅くにいくつかのバズがあります。

このような急増の犠牲者は、バージョンチェックが無駄になることです。もうコード内で何ができるのかは分かりません。また、Microsoftが新しいWindowsリリースと互換性のある古いプログラムを保持していたappcompatシムを展開する方法もありません。数万のプログラムを共通して使用していることを確認しなければならない大規模な取り組みは苦痛です。ホログラフィックのようなカスタムビルドの数と、政治とマーケティングが鼓舞するさまざまなエディション(N、KN、E、V、S、A、EMなど)を掛け合わせて、これがあなたが望む問題ではないと想像することができますあなた自身も解決してください。

Environment.OSVersionの動作、GetWindowsVersionEx()のようなwinapiの機能にも注意してください。今日のOSは、単にあなたにあって、バージョン6.3を返します。 Windows 8.1のバージョン番号。その嘘を消すには、EXEファイルのヘッダーで対象となるサブシステムのバージョンを変更する必要があります。フレームワークのバージョン4.5以上をターゲットにしている場合は、.NETコンパイラを使用して4.0から6.0に設定します(XPまたはServer2003では実行されません)。 10.0に変更する必要があります。バックグラウンドis here。鶏と卵の問題は意図的です。

マイクロソフトでは、このコードで「機能ベースの」チェックを使用することで、今日誰もがこの問題に対処したいと考えています。 OSにサブ機能がないために機能が停止した場合、正常に機能しなくなるため、ユーザーは自分のエディションでは十分ではないことが分かります。だから非常にではなく、あなたがやろうとしているものがです。

+0

私はOSが実行していることを伝えるメッセージをapiに送信しようとしています。しかし、私は出力全体の文字列を送ることを避け、この名前/説明を表現するために何かを送ってから、ローカルで検索したいと思っていました。 – ericosg

+0

そのコメントは私があなたを助けるのにはほとんど役に立ちません。あなたの質問を更新し、このapiとOSのバージョンが重要な理由について*具体的なものにしてください。 –

+0

私は、この行動の実際の目的について、私の質問にうまく答えたと思います。誰かがリバースルックアップの解決策を持っている場合に備えて、私ができる限り、賞金を残します。 – ericosg

関連する問題