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?

¿Fue útil?

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"]);
}

Fuente

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);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top