检查安装了哪个版本的DirectX

根据标题,我如何检查用户安装的DirectX版本? 检查FeatureLevel是不够的,因为我的应用程序可以在function级别10.0上运行,但需要安装DirectX 11.1。

为什么这不重复:

  • 如何在C#中在我的机器上获得直接X版本的代码?
    • 这个问题的第一个答案是“如果Windows 7,DirectX = 11,如果Windows Vista,DirectX = 10”。 这是错误的,因为Vista支持DirectX 10和11,Windows 7支持DirectX 11和11.1。
    • 第二个答案引用了一个仅适用于DirectX 9及更低版本的注册表项。 即使在安装了DirectX 11.1的Windows 7系统上,此注册表项也不会指示安装的版本大于9.0c
  • .NET如何检测是否支持DirectX 10?
    • 这个问题的答案再次引用了DirectX 9和更低版本的相同注册表项。

我需要一个适用于DirectX 10安装及以上的答案。 这意味着确定他们的版本是10,10.1,11或11.1。

编辑:删除注册表检查方法,因为它只适用于Dx <= 9(thx @Telanor)

这种方法非常非常慢,但只有一个我认为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]); }