Я пытаюсь получить идентификатор флэш-накопителя USB, используя этот код:
ManagementObjectSearcher theSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
foreach (ManagementObject currentObject in theSearcher.Get())
{
Console.WriteLine("PNPDeviceID: " + currentObject["PNPDeviceID"]);
}
На большинстве компьютеров я получаю что-то вроде этого: USBSTOR \ DISK & VEN_TQ & PROD_S1 & REV_1.10 \ 11100049977 & 0
, нов некоторых системах для одного и того же USB-накопителя я получаю что-то вроде этого: USBSTOR \ DISK & VEN_TQ & PROD_S1 & REV_1.10 \ 6 & 2D2B8A01 & 0 & 11100049977 & 0
Обратите внимание, что часть 6 & 2D2B8A01 & 0 & изменяется в зависимости от порта, который вставляется в USB-накопитель.
Как получить первую версию идентификатора в каждой системе независимо от того, в какой порт вставлен USB-накопитель?
UPDATE 1 : при использовании Win32_DiskDrive USB-накопительобнаружен на каждом ПК.Но при использовании Win32_USBHub USB-накопитель не обнаруживается на проблемных ПК.
ОБНОВЛЕНИЕ 2 : при использовании класса SystemUSBDrives из этого ответа , на проблемных ПК я получаю такой вывод:
Порт 1:
SystemUSBDrives PNPDeviceID: USBSTOR\DISK&VEN_TQ&PROD_S1&REV_1.10\6&2D2B8A01&0&11100049977&0
SystemUSBDrives DeviceID: \\.\PHYSICALDRIVE2
SystemUSBDrives SerialNumber:
SystemUSBDrives VolumeSerialNumber: D6533504
Порт 2:
SystemUSBDrives PNPDeviceID: USBSTOR\DISK&VEN_TQ&PROD_S1&REV_1.10\6&7A722D3&0&11100049977&0
SystemUSBDrives DeviceID: \\.\PHYSICALDRIVE2
SystemUSBDrives SerialNumber:
SystemUSBDrives VolumeSerialNumber: D6533504
Порт 3:
SystemUSBDrives PNPDeviceID: USBSTOR\DISK&VEN_TQ&PROD_S1&REV_1.10\6&32CECE73&0&11100049977&0
SystemUSBDrives DeviceID: \\.\PHYSICALDRIVE2
SystemUSBDrives SerialNumber:
SystemUSBDrives VolumeSerialNumber: D6533504
Использование этого на других компьютерах возвращает правильный SystemUSBDrivesЗначение SerialNumber.