2015-07-20 21 views
9

:Windows 10 RTM OSVersion ne beklemek dönen değil Windows 10 sürümünü çağırır

Environment.OSVersion.ToString() 

Dönüş, Windows 8 ve 8.1 sürümü 6.3 6.2 değil dönmek

enter image description here

bu?!

Im Windows 10 RTM VS 2015 (windows güncelleme ile Insider yükseltme) kullanılarak RC ve

Şimdi ben pencerelerin doğru sürümünü, herhangi bir çözüm almak gerekir .Net 4.6?

+3

Böcekleri çağırırken ve tüm kapaklara giderken dikkatli olun. Şansınız, kullandığınız kanıtlanmış çerçevenin aslında buggy olmamasıdır. – zneak

cevap

11

O, bu MSDN bir hata değil:

Operating System Version

Windows 10 Insider Preview 10.0* 
Windows Server Technical Preview 10.0* 
Windows 8.1 6.3* 

*: Windows 8.1'de veya Windows 10 Insider Önizleme için kendini edilmiş uygulamalar için. Windows 8.1 veya Windows 10 Insider Preview için gösterilmeyen uygulamalar, Windows 8 OS sürüm değeri (6.2)'u döndürecektir. Windows 8.1 veya Windows 10 Insider Preview için uygulamalarınızı göstermek için, Targeting your application for Windows'a bakın.

yine Windows sürümü ne gerekiyor?

+0

C# .... 'da çalışmıyor. Kılavuzu görüyorum. – user3477026

+0

Environment.OSVersion.ToString() Windows 8.1'de 6.2 sürümüne dönüyor. – user3477026

+2

Bir uygulamanın Windows 8.1'de "6.2" vermesi, uygulamanın 8.1 için kendini göstermediği anlamına gelir. MSDN sayfasını, özellikle de [Windows için uygulamanızı hedefleme] (https://msdn.microsoft.com/en-us/library/windows/desktop/dn481241 (v = vs.85) .aspx) bağlantısını okuyun. – CodeCaster

13

WMI sorgusunu kullanın, sürümü ve ilgili ürün adını almanın en güvenilir yoludur.

 public static KeyValuePair<string, string> GetOSVersionAndCaption() 
     { 
       KeyValuePair<string, string> kvpOSSpecs = new KeyValuePair<string, string>(); 
       ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption, Version FROM Win32_OperatingSystem"); 
     try 
     { 

      foreach (var os in searcher.Get()) 
      { 
       var version = os["Version"].ToString(); 
       var productName = os["Caption"].ToString(); 
       kvpOSSpecs = new KeyValuePair<string, string>(productName, version); 
      } 
     } 
     catch { } 

     return kvpOSSpecs; 
    } 
+1

Ayrıca, Windows 10 ve Windows Server 2016'yı ayırt etmek için ProductType için sorgulamak isteyeceksiniz.ProductType aşağıdakilerden biri olacaktır: 1: İş İstasyonu - Windows 10 2: Etki Alanı Denetleyicisi 3: Sunucu - Windows Server 2016 –

0

Windows 10 Yeni bir kayıt anahtarı var - değil daha önceki sürümlerden (teoride) Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentMajorVersionNumber", Nothing) den 10 bir sonuç almak ve olacaktır.

Bu, kronometre nesnesine göre 0 milisaniyede çalışırken, WMI yöntemi benim için en az 30 ms sürer.

+2

_ "Bu, 0 milisaniyeden daha kısa bir süre içinde çalışır" _ - bu yüzden kayıt defteri anahtarının beklediğini söylüyorsunuz Zaman yolculuğu sırrı? – CodeCaster

+0

Gerçekten de, zaman her zaman 0ms olarak bildirildiğinde beni eğlendirir :) –

+0

30 ms, yalnızca bir kez çağırmanız gereken ve çoğu sürüm için doğru şekilde çalıştığınız bir API için çok yüksek bir fiyat ödemek gibi görünmüyor (Windows 2000'den başlayarak, Windows 2000'den başlayarak. Kayıt defterini kullanmak, CurrentMajorVersionNumber'i desteklemeyen önceki sürümlerin kullanımını gerektirir. Kayıt defterini kullanırsanız, Windows Server 2016'nın CurrentMajorVersionNumber = 10 olduğunu da unutmayın. Bunları ayırt etmek için InstallationType'a erişilmesi gerekiyor. Bu olabilir: Müşteri | Sunucu | ... Yani 2-3 kayıt defteri erişimine ihtiyacınız olabilir. Bu 3 X 0ms daha uzun sürebilir :) –