2015-04-14 38 views
0

如何通过c#获取Windows驱动程序文件的文件属性或版本信息。 我使用这个代码:在windows中获取驱动程序文件版本

var version = File.GetAttributes(Environment.SystemDirectory + @"\drivers\acpi.sys"); 

但是这个代码抛出异常:Could not find file 'C:\Windows\system32\drivers\acpi.sys'.。 然后,我在dir变量中使用此代码var dir = Directory.GetFiles(Environment.SystemDirectory + @"\drivers");我有4个文件。如果我通过Windows资源管理器打开此文件夹,我在文件夹300+文件中。我究竟做错了什么?

+2

你不能在Windows 95了,有你的应用程序和系统之间有很多更多的事情。为什么你甚至想要阅读'acpi.sys'的版本? – Luaan

+0

@Luaan这就是例子。我需要读取另一个文件的信息。这个问题不仅适用于acpi.sys。 – EXTRAM

+1

你在说司机。你为什么要查询驱动程序版本?你为什么试图通过阅读文件系统中的文件版本来做到这一点? – Luaan

回答

1

你应该使用> = FrameWork的.NET 4, 添加:

using System.Management; 

并添加参考System.Management;

 ManagementObjectSearcher searcher = 
         new ManagementObjectSearcher("root\\CIMV2", 
         "SELECT * FROM Win32_PnPSignedDriver"); 
     ManagementObjectCollection moc = searcher.Get(); 

     foreach (var manObj in moc) 
     { 
      Console.WriteLine("Device Name:" + manObj["FriendlyName"] + " \r\nDeviceID: " + manObj["DeviceID"] + "\r\nDriverDate: " + manObj["DriverDate"] + "\r\nDriverVersion: " + manObj["DriverVersion"] + "\r\nDriverName:" + manObj["DriverName"] +"\n\r======================================\n\n";); 
     } 

结果(部分):

enter image description here

+0

如何通过sys文件的名称查询驱动程序? – EXTRAM

+0

@EXTRAM不要。你仍然从完全错误的角度看待这个问题。物理'sys'文件只是一个没有重要性的细节。取而代之的是设备ID,例如'ClassGuid'或USB供应商/设备对。 – Luaan

+0

'ManagementObjectSearcher'是一个缓慢的屁股疼痛,而是使用文件版本,如果它是正确的。 – Wobbles

相关问题