2013-06-16 65 views
5

Theo tiêu đề, làm cách nào để kiểm tra phiên bản DirectX mà người dùng đã cài đặt? Việc kiểm tra FeatureLevel không đủ, vì ứng dụng của tôi có thể chạy trên mức tính năng 10.0, nhưng yêu cầu cài đặt DirectX 11.1.Kiểm tra xem phiên bản DirectX nào được cài đặt

Tại sao đây không phải là một trùng lặp:

  • How to code to get direct X version on my machine in C#?
    • Câu trả lời đầu tiên trong câu hỏi này cho biết: "Nếu Windows 7, DirectX = 11, nếu Windows Vista, DirectX = 10". Điều này là sai, vì Vista hỗ trợ cả DirectX 10 và 11 và Windows 7 đều hỗ trợ DirectX 11 và 11.1.
    • Câu trả lời thứ hai tham chiếu khóa đăng ký chỉ áp dụng cho DirectX 9 trở xuống. Thậm chí trên một hệ thống Windows 7 với DirectX 11.1 được cài đặt, khóa registry này sẽ không bao giờ cho thấy một phiên bản cài đặt lớn hơn 9.0c
  • .NET How to detect if DirectX 10 is supported?
    • Câu trả lời cho câu hỏi này một lần nữa tham chiếu khóa registry tương tự cho DirectX 9 và CHỈ thấp hơn.

Tôi cần câu trả lời áp dụng cho cài đặt DirectX 10 trở lên. Điều đó có nghĩa là xác định xem phiên bản của họ là 10, 10.1, 11 hoặc 11.1.

Trả lời

3

EDIT: Removed registry phương pháp kiểm tra bởi vì nó chỉ hoạt động cho Dx < = 9 (thx @Telanor)

Phương pháp này là rất, rất chậm, nhưng chỉ có một tôi đã tìm ra đó là chính xác 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

Hơi khó, nhưng nó rất chậm và khó khăn. Từ một thử nghiệm nhanh chóng trong dấu nhắc lệnh, tôi muốn nói nó không thể chấp nhận chậm. – Telanor

+1

Tôi biết điều đó. Điều tồi tệ nhất là khi chạy 'dxdiag/x file.xml' từ dấu nhắc lệnh, tôi vẫn phải chờ tệp xuất hiện sau khi thoát khỏi quá trình. Bạn luôn có thể đọc chuỗi phiên bản từ sổ đăng ký 'HKLM \ Software \ Microsoft \ DirectX \ Version' và giải mã nó. Tôi sẽ chỉnh sửa câu trả lời của tôi –

+4

Khóa sổ đăng ký đó chỉ áp dụng cho directx 9 và thấp hơn – Telanor

Các vấn đề liên quan