[英]C# and diskpart: how to select by disk label and not by a number?
[英]Diskpart UniqueID - C# how to get that id
我熟悉VolumeSerialNumber,我需要與diskpart中所示相同的磁盤ID:
WD My Passport 0740 USB設備磁盤ID:08B29B51類型:USB狀態:聯機路徑:0目標:0 LUN ID:0位置路徑:不可用當前只讀狀態:否只讀:否引導盤:否Pagefile磁盤:否休眠文件磁盤:否故障轉儲磁盤:否群集磁盤:否
我在網絡(WMI)或論壇上找不到支持此請求的任何內容。 有人有主意嗎?
簽出Win32_DiskDrive WMI類。 它有一個名為Signature
的字段,其中包含此ID。 但是請注意,這不是string ,而是數字。 如果要匹配在DiskPart中看到的內容,則必須將該數字顯示為十六進制字符串( signature.ToString("X")
)
這是打印驅動器簽名的代碼:
public void PrintDiskDriveSignature()
{
var searcher = new ManagementObjectSearcher
(@"\\localhost\ROOT\CIMv2", "select * from Win32_DiskDrive");
var drives = searcher.Get();
foreach (var drive in drives)
{
string name = drive["Name"].ToString();
uint signature = (uint) drive["Signature"];
Console.WriteLine("{0}: {1}", name, signature.ToString("X"));
}
}
這是我創建的用於從Driveletter獲取DiskID的方法。 可能是執行此操作的更好方法,但這目前對我有用。 感謝你的幫助。
public static string GetDiskID(char Drive) { uint volumeSerialNumber = 0; bool DriveFound = false; foreach (ManagementObject drive in new ManagementObjectSearcher("select DeviceID, Signature from Win32_DiskDrive").Get()) { foreach (ManagementObject partition in new ManagementObjectSearcher(String.Format("associators of {{Win32_DiskDrive.DeviceID='{0}'}} where AssocClass = Win32_DiskDriveToDiskPartition", drive["DeviceID"])).Get()) { if (partition != null) { ManagementObject logical = new ManagementObjectSearcher(String.Format("associators of {{Win32_DiskPartition.DeviceID='{0}'}} where AssocClass = Win32_LogicalDiskToPartition", partition["DeviceID"])).First(); if (logical != null) { if (logical["Name"] != null) { string logicalName = logical["Name"].ToString(); if (logicalName[0] == Drive) { volumeSerialNumber = (uint)drive["Signature"]; DriveFound = true; break; } } } } } if (DriveFound) break; } var serial = volumeSerialNumber.ToString("x"); while (serial.Length < 8) { serial = serial.Insert(0, "0"); } return serial.ToUpper(); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.