2013-06-16 16 views
5

Jak w tytule mogę sprawdzić, którą wersję programu DirectX zainstalował użytkownik? Sprawdzanie FeatureLevel nie wystarczy, ponieważ moja aplikacja może działać na poziomie funkcji 10.0, ale wymaga zainstalowania DirectX 11.1.Sprawdź, która wersja programu DirectX jest zainstalowana.

Dlaczego to nie jest duplikatem:

  • How to code to get direct X version on my machine in C#?
    • Pierwsza odpowiedź na to pytanie, mówi: "W przypadku Windows 7, DirectX = 11, jeśli Windows Vista, DirectX = 10". To źle, ponieważ Vista obsługuje zarówno DirectX 10, jak i 11, a Windows 7 obsługuje DirectX 11 i 11.1.
    • Druga odpowiedź odnosi się do klucza rejestru, który dotyczy tylko wersji DirectX 9 i niższych. Nawet na systemie Windows 7 z zainstalowanym DirectX 11.1 Klucz ten nie wskaże zainstalowaną wersję większa niż 9.0c
  • .NET How to detect if DirectX 10 is supported?
    • Odpowiedź na to pytanie jeszcze raz odwołuje się do tego samego klucza rejestru dla DirectX 9 i niższe TYLKO.

muszę odpowiedzieć, że stosuje się do DirectX 10 instaluje i góry. Oznacza to ustalenie, czy ich wersja to 10, 10.1, 11 czy 11.1.

Odpowiedz

3

EDIT: Usunięto metoda kontroli rejestru, ponieważ działa tylko na Dx < = 9 (thx @Telanor)

Metoda ta jest bardzo powolna, ale tylko jeden zorientowali się, że jest w 100% dokładne

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

Nieco, ale jest powolny i niezgrabny. Z szybkiego testu w wierszu poleceń, powiedziałbym, że jest niedopuszczalnie powolny. – Telanor

+1

Jestem tego świadomy. Najgorsze jest to, gdy uruchamiam 'dxdiag/x file.xml' z wiersza poleceń. Nadal muszę czekać na pojawienie się pliku po zakończeniu procesu. Zawsze można przeczytać ciąg wersji z rejestru 'HKLM \ Software \ Microsoft \ DirectX \ Version' i dekodować go. Będę edytować moją odpowiedź –

+4

Ten klucz rejestru dotyczy tylko DirectX 9 i niższy – Telanor

Powiązane problemy