Member 14052128 Ответов: 4

Как я могу получить серийный номер жесткого диска, на котором установлена ОС windows


Я разработал приложение, которое использует серийный номер жесткого диска для активации, но когда дело доходит до ПК, который использует несколько жестких дисков, это проблема, поэтому я пытаюсь найти серийный номер жесткого диска, который поставляется с установкой ОС, более четко жесткий диск, который действует как диск C .Я также попробовал приведенный ниже код, но он иногда возвращает информацию о диске D.

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

public string GetHardSerial()
      {
          ManagementObjectSearcher Finder = new ManagementObjectSearcher("Select * from Win32_OperatingSystem");
          string Name = "";
          string SerialNumber = "";
          foreach (ManagementObject OS in Finder.Get()) Name = OS["Name"].ToString();

          //Name = "Microsoft Windows XP Professional|C:\WINDOWS|\Device\Harddisk0\Partition1"

          int ind = Name.IndexOf("Harddisk") + 8;
          int HardIndex = Convert.ToInt16(Name.Substring(ind, 1));
          Finder = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Index=" + HardIndex);
          foreach (ManagementObject HardDisks in Finder.Get())
              foreach (ManagementObject HardDisk in HardDisks.GetRelated("Win32_PhysicalMedia"))
                  SerialNumber = HardDisk["SerialNumber"].ToString();
         // TextBox1.Text = Convert.ToString(Name);
         // TextBox2.Text = Convert.ToString(SerialNumber);
          return SerialNumber;

      }

Kornfeld Eliyahu Peter

В чем же проблема? Вы не знаете, как найти жесткий диск, на котором установлена ОС? Или вы не знаете, как получить серийный номер для этого диска?

Member 14052128

как именно найти серийный ключ для жесткого диска с установленной ОС?

Member 14052128

код, который я попробовал, вернет последовательный ключ, для которого приходит первый диск в качестве orderd в device manger

F-ES Sitecore

Просто чтобы вы знали, это получение сведений о диске сервера, на котором установлено ваше приложение, а не о клиентском браузере.

4 Ответов

Рейтинг:
2

phil.o

Windows не всегда устанавливается на диск C:. Более того, C: не представляет собой диск, он представляет собой раздел на диске.
Если ваш код получает серийный номер диска D:, это означает, что Windows in установлена на раздел, которому была присвоена буква D.
Почему это проблема, если вам нужно, чтобы результат был уникальным только для одного компьютера? Независимо от того, какой серийный номер возвращается, вам нужно только возвращать один и тот же серийный номер каждый раз, когда функция вызывается на одном и том же компьютере.


Member 14052128

проблема возникает тогда, когда при подключении внешнего жесткого диска он принимает его серийный номер.

Kornfeld Eliyahu Peter

Как это происходит - по своей природе серийные номера уникальны (он включает в себя идентификатор производителя и внутренний серийный номер)...

phil.o

Почему ты так думаешь? Если вы подключите внешний диск, ему будет присвоен индекс, отличный от индекса системного диска. И ваш код все равно получит диск с правильным индексом.

Maciej Los

5ed!

phil.o

Спасибо.

Рейтинг:
1

Maciej Los

Если вы хотите получить букву диска, на котором установлена ОС Windows, используйте это: Окружающая среда.Метод GetEnvironmentVariable (System) | Microsoft Docs[^]

string windir = Environment.GetEnvironmentVariable("windir"); //or systemroot
Console.WriteLine("Windows OS is installed on: '{0}'", windir);
//displays: Windows OS is installed on 'C:\Windows'

//get drive info...
DriveInfo drive = DriveInfo.GetDrives()
		.Where(d=>windir.Contains(d.Name))
		.SingleOrDefault();

//further logic here....



Для получения более подробной информации, пожалуйста, смотрите:
Окружающая среда.Перечисление Специальных Папок (System) | Microsoft Docs[^]
Окружающая среда.Метод GetLogicalDrives (Система) | Microsoft Docs[^]
Как получить серийный номер реального жесткого диска[^]


[no name]

приятно, что благодаря вашему решению я смог очень быстро получить серийный номер

Maciej Los

Всегда пожалуйста.
Если мой ответ был полезен, пожалуйста, примите его с помощью зеленой кнопки.

phil.o

Он не мог согласиться, так как он не ОП.
В аккаунте довольно сильно пахнет спамом.
Возьми мой 5-й, кстати :)

Maciej Los

Спасибо!

Рейтинг:
1

Dave Kreskowiak

Вы также делаете ошибку, предполагая, что каждый диск имеет серийный номер. Это не так, особенно в случае "восстановленных" приводов.


phil.o

Я этого не знал. Спасибо за информацию.

Dave Kreskowiak

Также верно, что не каждый SSD имеет серийный номер. Вы даже можете получить целые партии твердотельных накопителей, которые все имеют один и тот же серийный номер!

Maciej Los

Согласитесь!

Member 14052128

что делать, если у меня есть два жестких диска, которые действуют как ведущий и ведомый ведомый может быть удален в любое время и может быть изменен, если это произойдет, это вызовет probelm, как программное обеспечение не активируется(предполагая, что при активации он берет серийный номер ведомого устройства).Вот с какой проблемой я столкнулся?

Dave Kreskowiak

Со времен IDE не было таких понятий, как "ведущий" и "ведомый" диски, так что это не имеет смысла и никак не влияет на то, что вы пытаетесь сделать в любом случае.

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

Что вы собираетесь делать, когда ваш код работает на копии Windows, установленной на дешевом поддельном SSD-накопителе, у которого нет серийного номера? Что вы собираетесь делать, когда две машины, по-видимому, имеют один и тот же серийный номер? Твоя схема теперь провалена.

Если вы хотите лицензировать свое приложение, используйте для этого профессиональный пакет. Не "сворачивайте свой собственный".

Member 14052128

ни одно из решений не было решателем проблем

Dave Kreskowiak

Как кто-то может придумать решение проблемы, когда ваш код сделал некоторые очень плохие предположения о том, как работает Windows (и аппаратное обеспечение, на котором она работает)?

Тот код, который вы разместили, где вы получаете "индексный" номер от имени, "Harddrive0". Этот "индекс" не является индексом и не является картой в результатах Win32_DiskDrive.

Рейтинг:
0

OriginalGriff

Вместо загрузочного жесткого диска вы можете лучше обращаться с серийным номером процессора: жесткие диски имеют ограниченный срок службы, и они выходят из строя намного быстрее, чем процессоры. Восстановленный образ из резервной копии не будет работать в вашей системе, где замена процессора почти наверняка является новым или другим компьютером (и, вероятно, новой оперативной памятью и материнской платой, по крайней мере).
Это может помочь:
Как получить серийный номер ПК с помощью C#[^]
Серийный номер процессора[^]