Надежный способ получить версию Windows из реестра

Я проверяю версию windows в установщике (сделанном с NSIS), проверяя следующий раздел реестра:

HKLM "SOFTWAREMicrosoftWindows NTCurrentVersion" "CurrentVersion"

по данным этот пост и на этой странице из MSDN номер currentVersion для Windows 10 должен быть 10.0.

Я только что установил предварительный просмотр Windows 10 Pro Insider и номер версии, указанный в реестре, по-прежнему 6.3, а не 10.10, как следует.

есть ли другой надежный способ реестра для обнаружения Windows 10?

4 ответов


вместо чтения значения CurrentVersion читайте новые значения CurrentMajorVersionNumber (который 10) и CurrentMinorVersionNumber (что равно 0) под Windows 10. Те 2 клавиши в Windows 10 для обнаружения версии Windows, из реестра.


в реестре также есть читаемая человеком строка под названием "ProductName"

using Microsoft.Win32;
private string getOSInfo()
{
   string registry_key = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion";
   var key = Registry.LocalMachine.OpenSubKey(registry_key);
   var value = key.GetValue("ProductName");
   return value.ToString();
}

попробовать

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ReleaseId

что дает мне 10 и 1709.


см. статью Питера Брайта на https://arstechnica.com/information-technology/2014/11/why-windows-10-isnt-version-6-any-more-and-why-it-will-probably-work/ для более глубокого понимания того, почему вы видите ответы, которые вы делаете. Как вы уже видели из @magicandre1981,CurrentMajorVersionNumber ключ даст вам "10", который вы хотите. Вы можете получить 10.0 из System.Environment.OSVersion если манифест приложения явно обозначает приложение для Windows 10, как указано в указанной статье. Без него,Environment.OSVersion даст вам 6.2.9200, который совпадает с Windows 8. Так, ОС Windows 10 версия 10.0, 6.3 или 6.2, в зависимости от того, как вы зададите вопрос.