.net - saber - ¿Cómo encontrar la letra de la unidad USB?
como saber la letra de mi usb (3)
Estoy escribiendo un programa de instalación para instalar una aplicación en una unidad USB. La aplicación está pensada para ser utilizada solo desde unidades USB, por lo que se ahorraría un paso adicional para el usuario seleccionando automáticamente la unidad USB para instalar.
Podría explorar el uso de Nullsoft o MSI para la instalación, pero como estoy familiarizado con .NET inicialmente tengo la intención de probar el instalador .NET personalizado o el componente de instalación en .NET.
¿Es posible determinar la letra de unidad de una unidad flash USB en Windows con .NET? ¿Cómo?
Esto enumerará todas las unidades en el sistema sin LINQ pero aún usando 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"]);
}
Podrías usar:
from driveInfo in DriveInfo.GetDrives()
where driveInfo.DriveType == DriveType.Removable && driveInfo.IsReady
select driveInfo.RootDirectory.FullName
Versión C # 2.0 del código de Kent (desde lo más alto de mi cabeza, no probado):
IList<String> fullNames = new List<String>();
foreach (DriveInfo driveInfo in DriveInfo.GetDrives()) {
if (driveInfo.DriveType == DriveType.Removable) {
fullNames.Add(driveInfo.RootDirectory.FullName);
}
}