Frage

Ich schreibe ein Setup-Programm, eine Anwendung auf ein USB-Laufwerk zu installieren. Die Anwendung soll von USB-Laufwerken nur verwendet werden, so würde es durch die automatische Auswahl von USB-Laufwerk zu installieren, um einen zusätzlichen Schritt für den Benutzer speichern.

Ich könnte für die Installation unter Verwendung von Nullsoft oder MSI erkunden, aber da ich mit .NET meist vertraut bin zunächst ich plane entweder benutzerdefinierte .NET-Installer oder Setup-Komponente auf .NET versuchen.

Ist es möglich, die Laufwerksbuchstabe eines USB-Flash-Laufwerk unter Windows mit .NET zu bestimmen? Wie?

War es hilfreich?

Lösung

Sie können verwendet werden:

from driveInfo in DriveInfo.GetDrives()
where driveInfo.DriveType == DriveType.Removable && driveInfo.IsReady
select driveInfo.RootDirectory.FullName

Andere Tipps

Damit werden alle Laufwerke auf dem System ohne LINQ aufzuzählen, aber immer noch WMI mit:

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

Quelle

C # 2.0-Version von Kents Code (von der Oberseite meines Kopfes, nicht getestet):

IList<String> fullNames = new List<String>();
foreach (DriveInfo driveInfo in DriveInfo.GetDrives()) {
    if (driveInfo.DriveType == DriveType.Removable) {
        fullNames.Add(driveInfo.RootDirectory.FullName);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top