我正在运行Windows 10 Professional 1809内部版本17763。
"Enterprise"
的值为HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EditionID
,这是错误的。
"Professional"
是using System;
using System.Collections.Generic;
using Microsoft.Win32;
class Program
{
static void Main(string[] args) {
List<string> valueNames = new List<string> { "ProductName", "EditionID" };
foreach (var valueName in valueNames) {
string value = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", valueName, "Key not found");
Console.WriteLine($"{valueName}: {value}");
}
}
}
,这是正确的。
这是Windows安装中的特定问题吗?如果没有,如果您要以32位开发,您将如何解决?
我的原始代码是C ++。因为我首先不了解该问题,所以我在C#中重新实现了它。我希望能用C#或C ++解决方案,并且我相信只要使用另一种语言的解决方案,我就能用一种语言解决该问题。谢谢!
//---- C++ version
#include "Registry.hpp" // Modern C++ Wrappers for Win32 Registry Access APIs by Giovanni Dicanio
const std::wstring subKey{ L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion" };
const std::wstring value{ L"EditionID" };
std::wstring ws = win32::RegGetString(HKEY_LOCAL_MACHINE, subKey, value);
this->windowsEdition = std::string(ws.begin(), ws.end());
EditionID
"Professional"
应该是"Enterprise"
,但是应该是body, html {
width: 100vw;
height: 100vh;
margin: 0;
padding: 0;
}
#blog {
width: 100vw;
height: 100vh;
margin: 0;
padding: 0;
}
。
答案 0 :(得分:0)
要从32位应用程序访问注册表中的64位树,必须使用选项 KEY_WOW64_64KEY 打开注册表项。
C / C ++示例:
error = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_QUERY_VALUE | KEY_WOW64_64KEY, &hKey);
编辑:
对于.Net 3.5或更早版本,我发现了这一点:how-read-the-64-bit-registry-from-a-32-bit-application
编辑:C#(4.x)代码:
RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).
答案 1 :(得分:0)
我也遇到了这个问题,但是根据Ralph的建议,对于专业版,versionID也可以正确显示。
C#代码:
var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
var editionID = key.GetValue("EditionID");