1

を使用して、C# のレジストリから Windows の「製品名」を読み取ることができます。

Registry.GetValue ( @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", "" )

Windows Pro の 64 ビット バージョンを実行していますが、32 ビット アプリケーションからは「Windows 10 Enterprise」が返されます。

実際、レジストリを見ると、キーでそれを見ることができます

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

値は「Windows 10 Pro」ですが、キーには

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion

それが「Windows 10 Enterprise」です。

これは意味がありますか?

実際の製品名を取得する簡単な (つまり 1 行の) 方法はありますか?

4

2 に答える 2

0

32 ビットと 64 ビットのハイブが異なる理由はわかりません。Windows 10 Pro x64 21H1 の新規インストールでは、32 ビット バージョンにはEditionof"Enterprise"ProductNameof があり"Windows 10 Enterprise"ます。64 ビットのレジストリには正しい"Pro"値がありました。

私の 32 ビット プロセスは、デフォルトで x64 OS の 32 ビット レジストリに設定されていました。コードが実際に 32 ビット OS で実行された場合の状況について説明したかったのです。

ワンライナーではありませんが、このコードを使用して、OS に基づいてレジストリを選択しました。

var hklm64 = RegistryKey.OpenBaseKey(
  RegistryHive.LocalMachine,
  Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32
);

RegistryKey rk = hklm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");

string product = (string)rk.GetValue("ProductName");
string edition = (string)rk.GetValue("Edition");
于 2021-07-06T18:55:39.420 に答える