2013-06-16 15 views
5

Come per il titolo, come posso verificare quale versione di DirectX è stata installata da un utente? Il controllo di FeatureLevel non è sufficiente, poiché la mia applicazione può essere eseguita con livello di funzionalità 10.0, ma richiede l'installazione di DirectX 11.1.Verifica quale versione di DirectX è installata

perché questo non è un duplicato:

  • How to code to get direct X version on my machine in C#?
    • La prima risposta a questa domanda dice: "Se Windows 7, DirectX = 11, se Windows Vista, DirectX = 10". Questo è sbagliato, in quanto Vista supporta sia DirectX 10 che 11 e Windows 7 supporta DirectX 11 e 11.1.
    • La seconda risposta fa riferimento a una chiave del Registro di sistema che si applica solo a DirectX 9 e versioni precedenti. Anche su un sistema Windows 7 con DirectX 11.1 installato, questa chiave del Registro non potrà mai indicare una versione installata superiore a 9.0c
  • .NET How to detect if DirectX 10 is supported?
    • La risposta a questa domanda ancora fa riferimento ancora una volta la stessa chiave di registro per DirectX 9 e SOLO SOLO.

ho bisogno di una risposta che si applica a DirectX 10 installazioni in su. Ciò significa determinare se la loro versione è 10, 10.1, 11 o 11.1.

risposta

3

EDIT: Rimosso metodo di controllo del Registro, perché funziona solo per Dx < = 9 (thx @Telanor)

Questo metodo è molto, molto lento, ma solo quello che ho capito che è accurato al 100%

private static int checkdxversion_dxdiag() 
{ 
    Process.Start("dxdiag", "/x dxv.xml"); 
    while (!File.Exists("dxv.xml")) 
     Thread.Sleep(1000); 
    XmlDocument doc = new XmlDocument(); 
    doc.Load("dxv.xml"); 
    XmlNode dxd = doc.SelectSingleNode("//DxDiag"); 
    XmlNode dxv = dxd.SelectSingleNode("//DirectXVersion"); 

    return Convert.ToInt32(dxv.InnerText.Split(' ')[1]); 
} 
+0

Un po ', ma è lento e goffo. Da un rapido test al prompt dei comandi, direi che è inaccettabilmente lento. – Telanor

+1

Ne sono consapevole. La cosa peggiore è quando si esegue 'dxdiag/x file.xml' dal prompt dei comandi. Devo ancora aspettare che il file appaia dopo le uscite di processo. È sempre possibile leggere la stringa della versione dal registro 'HKLM \ Software \ Microsoft \ DirectX \ Version' e decodificarla. Modificherò la mia risposta –

+4

Quella chiave di registro si applica solo a directx 9 e inferiore – Telanor

Problemi correlati