Как найти букву USB-накопителя? - PullRequest
14 голосов
/ 24 сентября 2008

Я пишу программу установки для установки приложения на USB-накопитель. Приложение предназначено для использования только с USB-накопителей, поэтому оно сэкономит пользователю дополнительный шаг, автоматически выбрав USB-накопитель для установки на него.

Я мог бы изучить использование Nullsoft или MSI для установки, но, поскольку я в основном знаком с .NET, я изначально планирую попробовать либо специальный установщик .NET, либо компонент установки в .NET.

Можно ли определить букву диска USB-накопителя в Windows с помощью .NET? Как?

Ответы [ 3 ]

17 голосов
/ 24 сентября 2008

Вы можете использовать:

from driveInfo in DriveInfo.GetDrives()
where driveInfo.DriveType == DriveType.Removable && driveInfo.IsReady
select driveInfo.RootDirectory.FullName
15 голосов
/ 24 сентября 2008

При этом будут перечислены все диски в системе без LINQ, но все еще использующие 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"]);
}

Источник

14 голосов
/ 24 сентября 2008

C # 2.0 версия кода Кента (от макушки головы, не тестировалась):

IList<String> fullNames = new List<String>();
foreach (DriveInfo driveInfo in DriveInfo.GetDrives()) {
    if (driveInfo.DriveType == DriveType.Removable) {
        fullNames.Add(driveInfo.RootDirectory.FullName);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...