Cómo encontrar la letra de la unidad USB?
Pregunta
Estoy escribiendo un programa de instalación para instalar una aplicación en una unidad USB.La aplicación que está destinado a ser utilizado sólo desde unidades USB, de modo que se ahorraría un paso extra para el usuario, seleccionando automáticamente la unidad USB para instalar.
Yo podría explorar el uso de Nullsoft o MSI para instalar, pero ya que soy todo familiarizado con .NETA me inicialmente un plan para tratar personalizado .NET installer o el programa de instalación de componentes .NET.
Es posible determinar que la letra de la unidad de una unidad de memoria flash USB en Windows utilizando .NETA?Cómo?
Solución
Usted podría utilizar:
from driveInfo in DriveInfo.GetDrives()
where driveInfo.DriveType == DriveType.Removable && driveInfo.IsReady
select driveInfo.RootDirectory.FullName
Otros consejos
De esta forma se enumera todas las unidades en el sistema sin LINQ, pero aún con 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"]);
}
C# 2.0 versión de Kent código (de la parte superior 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);
}
}