How to find USB drive letter?

后端 未结 3 1669
鱼传尺愫
鱼传尺愫 2020-11-28 15:09

I\'m writing a setup program to install an application to a USB drive. The application is meant to be used only from USB drives, so it would save an extra step for the user

相关标签:
3条回答
  • C# 2.0 version of Kent's code (from the top of my head, not tested):

    IList<String> fullNames = new List<String>();
    foreach (DriveInfo driveInfo in DriveInfo.GetDrives()) {
        if (driveInfo.DriveType == DriveType.Removable) {
            fullNames.Add(driveInfo.RootDirectory.FullName);
        }
    }
    
    0 讨论(0)
  • 2020-11-28 15:44

    This will enumerate all the drives on the system without LINQ but still using 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"]);
    }
    

    Source

    0 讨论(0)
  • 2020-11-28 15:57

    You could use:

    from driveInfo in DriveInfo.GetDrives()
    where driveInfo.DriveType == DriveType.Removable && driveInfo.IsReady
    select driveInfo.RootDirectory.FullName
    
    0 讨论(0)
提交回复
热议问题