2010-04-19 6 views
29

Ho poco tempo fa ha deciso di insegnare a me stesso e c++win32 programmazione dopo aver appreso vb.net, e ho una domanda molto semplice:Come posso determinare la versione di Windows SDK installata sul mio computer?

Come è possibile determinare quale versione del Windows SDK è installato sul mio computer?

Sto chiedendo così posso installare l'ultima versione se non è già installata, prima di iniziare a giocare con c++. Sto usando Microsoft Visual Studio 2008 SP1 come il mio IDE.

risposta

31

Il locale inglese almeno:

dir "%ProgramFiles%\Microsoft SDKs\Windows" 

dovrebbe funzionare. È abbastanza probabile che ci siano più versioni installate, che è quella giusta per una build che può essere specificata solo da quel progetto.

+20

+1 - Ricordare di controllare anche "% ProgramFiles (x86)% \ Microsoft SDK \ Windows" su macchine a 64 bit. – user200783

+0

@PaulBaker: Potrebbe essere necessario o meno, le nuove versioni dell'SDK sembrano configurarsi in entrambi. – Richard

+0

Se ho la cartella v8.1 ma è solo ~ 2MB il framework 8.1 non è installato? – user145400

18

La versione corrente di Windows SDK viene memorizzato nel valore CurrentVersion della seguente chiave di registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows CurrentVersion

e può essere recuperato utilizzando questo PowerShell one-liner:

$(Get-Item "hklm:\SOFTWARE\Microsoft\Microsoft SDKs\Windows").GetValue("CurrentVersion") 

enter image description here

17

Se è necessario determinare, durante la compilazione, quale versione di Windows SDK viene utilizzata, è possibile utilizzare la macro VER_PRODUCTBUILD, definita in ntverp.h. Per esempio:

#include <ntverp.h> 
#if VER_PRODUCTBUILD > 9600 
// Windows 10+ SDK code goes here 
#else 
// Windows 8.1- SDK code goes here 
#endif 

Nella maggior parte dei casi questo non dovrebbe essere necessario in quanto un prodotto deve essere progettato di costruire con una particolare piattaforma SDK. Ma per alcuni prodotti di grandi dimensioni potrebbe essere necessario supportare più SDK della piattaforma. Questo può essere particolarmente utile durante la migrazione da uno all'altro. Se c'è un bug in un file di intestazione (come il falso "#pragma pop" nella versione di Windows 8.1 SDK di bthledef.h), potrebbe essere necessario risolvere questo problema, ma non includere la soluzione alternativa quando si utilizza l'SDK di Windows 10 o più alto.

+0

Sospetto che questo sia ciò che l'OP voleva, ed è assolutamente quello che volevo. Grazie! Ti ho appena dato un voto. –