如何找到USB驱动器号?
时间:2020-03-06 14:37:41 来源:igfitidea点击:
我正在编写一个安装程序,以将应用程序安装到USB驱动器。该应用程序只能在USB驱动器中使用,因此可以通过自动选择要安装的USB驱动器为用户节省额外的步骤。
我可能会探索使用Nullsoft或者MSI进行安装,但是由于我对.NET最为熟悉,因此我最初计划尝试在.NET上尝试自定义.NET安装程序或者安装组件。
是否可以使用.NET确定Windows上USB闪存驱动器的驱动器号?如何?
解决方案
我们可以使用:
from driveInfo in DriveInfo.GetDrives() where driveInfo.DriveType == DriveType.Removable && driveInfo.IsReady select driveInfo.RootDirectory.FullName
这将枚举不使用LINQ但仍使用WMI的系统上的所有驱动器:
// browse all USB WMI physical disks foreach(ManagementObject drive in new ManagementObjectSearcher( "select * from Win32_DiskDrive where InterfaceType='USB'").Get()) { // associate physical disks with partitions foreach(ManagementObject partition in new ManagementObjectSearcher( "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"] + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition").Get()) { Console.WriteLine("Partition=" + partition["Name"]); // associate partitions with logical disks (drive letter volumes) foreach(ManagementObject disk in new ManagementObjectSearcher( "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + partition["DeviceID"] + "'} WHERE AssocClass = Win32_LogicalDiskToPartition").Get()) { Console.WriteLine("Disk=" + disk["Name"]); } } // this may display nothing if the physical disk // does not have a hardware serial number Console.WriteLine("Serial=" + new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] + "'")["SerialNumber"]); }
来源
Kent代码的C2.0版本(从我的头开始,未经测试):
IList<String> fullNames = new List<String>(); foreach (DriveInfo driveInfo in DriveInfo.GetDrives()) { if (driveInfo.DriveType == DriveType.Removable) { fullNames.Add(driveInfo.RootDirectory.FullName); } }