2015-07-20 13 views
9

Quando chiamare la versione di Windows 10 con:di Windows 10 RTM OSVersion non tornare quello che mi aspetto

Environment.OSVersion.ToString() 

Return questo

enter image description here

Windows 8 e 8.1 la versione 6.2 non ritorno 6.3?!

Im utilizzando Windows 10 RTM (aggiornamento da Insider con windows update) VS 2015 RC e .Net 4.6

Ora ho bisogno di ottenere la versione corretta di Windows, qualsiasi soluzione?

+3

Fai attenzione quando chiami bug e vai con maiuscole. Le probabilità sono che la comprovata struttura che stai utilizzando sia, di fatto, non buggy. – zneak

risposta

11

non è un bug, è in MSDN:

Operating System Version

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

*: Per le applicazioni che sono state manifestate per Windows 8.1 o Windows 10 Insider Preview. Applicazioni non manifestate per Windows 8.1 o Windows 10 Insider Preview restituirà il valore della versione del sistema operativo Windows 8 (6.2). Per manifestare le applicazioni per Windows 8.1 o Windows 10 Insider Preview, fare riferimento a Targeting your application for Windows.

A cosa serve comunque la versione per Windows?

+0

Non funziona in C# .... Ho visto la guida – user3477026

+0

Environment.OSVersion.ToString() return 6.2 su Windows 8.1 Update 3 not 6.3 !! – user3477026

+2

Il fatto che un'applicazione ti dia "6.2" su Windows 8.1 significa che l'app non è manifestata per 8.1. Leggi la pagina MSDN, in particolare il link [Targeting della tua applicazione per Windows] (https://msdn.microsoft.com/en-us/library/windows/desktop/dn481241 (v = vs.85) .aspx). – CodeCaster

13

Utilizzare invece la query WMI, è il modo più affidabile per ottenere la versione e il nome del prodotto correlato.

 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

Si desidera anche eseguire una query per ProductType per distinguere Windows 10 vs Windows Server 2016.ProductType sarà uno di: 1: Workstation - Windows 10 2: Controller di dominio 3: Server - Windows Server 2016 –

0

di Windows 10 ha una nuova chiave di registro - si otterrà un risultato di 10 da Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentMajorVersionNumber", Nothing) e (in teoria) non dalle versioni precedenti.

Questo funziona in 0 millisecondi secondo l'oggetto cronometro, mentre il metodo WMI impiega almeno 30 ms per me.

+2

_ "Esegue in meno di 0 millisecondi" _ - quindi stai dicendo che la chiave del Registro di sistema tiene il segreto del viaggio nel tempo? – CodeCaster

+0

Infatti, mi diverte sempre quando il tempo impiegato viene segnalato come 0 ms :) –

+0

30 ms non sembra un prezzo troppo alto da pagare per un'API che è necessario chiamare una sola volta e funziona correttamente per la maggior parte delle versioni (a partire da Windows 2000) precedente a Windows 10. L'utilizzo del registro richiede la gestione del caso di versioni precedenti che non supportano CurrentMajorVersionNumber. Se si utilizza il registro, tenere presente che Windows Server 2016 segnala anche CurrentMajorVersionNumber = 10. È necessario accedere a InstallationType per distinguerli. Può essere: Client | Server | ... Quindi potresti aver bisogno di 2-3 accessi al registro. Questo potrebbe richiedere più tempo di 3 X 0ms :) –

Problemi correlati