Wie USB-Laufwerksbuchstaben zu finden?
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?
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"]);
}
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);
}
}