Member 14871639 Ответов: 1

Возвращайте серийный номер только с диска C или загрузочного диска в C#


Привет,

Я закодировал некоторый код, чтобы вернуть первые четыре серийных номера, символы из процессора, жесткого диска и материнской платы. Это хорошо работает.

Мне нужен какой-то код, который возвращает только серийный номер с диска с надписью "C:\" или загрузочного диска. В настоящее время, если я запускаю код, он возвращает последовательный номер с первого диска, но когда я подключаю внешний жесткий диск USB, он возвращает этот последовательный номер.

Есть идеи?

с уважением

Д

Что я уже пробовал:

private static async Task<string> GenerateUniqeID()

        {
            byte[] bytes;
            byte[] hashedBytes;
            StringBuilder sb = new StringBuilder();

            Task task = Task.Run(() =>
                {
                    ManagementObjectSearcher cpu = new ManagementObjectSearcher("Select * from Win32_Processor");
                    ManagementObjectCollection cpu_Collection = cpu.Get();

                    foreach (ManagementObject obj in cpu_Collection)
                    {
                        sb.Append(obj["ProcessorID"].ToString().Trim().Substring(0, 4));
                        break;
                    }

                    ManagementObjectSearcher hdd = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
                    ManagementObjectCollection hdd_Collection = hdd.Get();

                    foreach (ManagementObject obj in hdd_Collection)
                    {
                        sb.Append(obj["SerialNumber"].ToString().Trim().Substring(0, 4));
                        break;
                    }


                    ManagementObjectSearcher mbo = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
                    ManagementObjectCollection mbo_Collection = mbo.Get();

                    foreach (ManagementObject obj in mbo_Collection)
                    {
                        sb.Append(obj["SerialNumber"].ToString().Trim().Substring(0, 4));
                        break;
                    }

                });
            Task.WaitAll(task);
          return await Task.FromResult(sb.ToString());


        }

Maciej Los

Совет: что делает break инструкция есть?

Member 14871639

Привет Мацей,

Он останавливается после первого найденного. Таким образом, если есть четыре жестких диска, он остановится после первого.

Maciej Los

Знаете ли вы теперь, почему вы получаете только USB-накопитель?

1 Ответов

Рейтинг:
8

OriginalGriff

Диски и диски - это разные вещи-диски-это логические разделы на физических дисках, поэтому использование Win32_PhysicalMedia вряд ли сработает. Вам нужно получить серийный номер диска, связанного с загрузочным дисководом.

Видеть здесь: c# - получить серийный номер загрузочного диска и другую информацию - переполнение стека[^] который предоставляет код.