2016-01-24 1 views
2

Я работаю над проектом, и моя проблема, когда я пытаюсь получить серийный номер материнской платы полностью пустым.Получить HWID (processorID, MotherboardSerialNumber)

Dim HWID As String = String.Empty 
Dim mcl As New ManagementClass("win32_processor") 
Dim MOBC As ManagementObjectCollection = mcl.GetInstances() 

For Each mob As ManagementObject In MOBC 
    If HWID = "" Then 
     HWID = mob.Properties("processorID").Value.ToString() 
     Exit For 
    End If 

Next 
Dim mboardstr As String = Nothing 
Dim mbs As ManagementObjectSearcher = New ManagementObjectSearcher("Select * From Win32_BaseBoard") 
For Each mo As ManagementObject In mbs.Get 
    mboardstr = mboardstr + mo("SerialNumber").ToString 
Next 
MsgBox(mboardstr) 

HWID - processorid это окей, но я действительно хочу серийник материнской платы тоже, потому что после того, что я положил его в одну строку и отправить его на удаленный хост.

Почему у меня нет «серийного номера»? Благодаря!

ответ

0

Не все данные доступны для всех систем. В этом случае могут быть другие данные перед текстом, который вы ищете, что предотвращает выбор строки. WMI довольно медленный, поэтому вы можете ускорить его, просто запросив, что вы после (vs SELECT *).

Некоторые из этих вещей должны быть утилизированы, чтобы освободить ресурсы, и вы должны проверить некоторые из вещей, чтобы убедиться, что они не равны нулю перед их использованием:

Dim mboardstr As String = "" 
Dim query As String = "Select SerialNumber From Win32_BaseBoard" 

Using mbs As ManagementObjectSearcher = New ManagementObjectSearcher(query) 
    For Each mo As ManagementObject In mbs.Get 
     For Each pd As PropertyData In mo.Properties 
      ' should be only one 
      If pd.Name = "SerialNumber" Then 
       ' value is object, test for Nothing 
       If pd.Value IsNot Nothing Then 
        mboardstr = pd.Value.ToString 
       End If 
       Exit For 
      End If 
     Next 
    Next 
End Using 

Вы также можете установить контрольную точку, и изучить pd.Value, чтобы увидеть, есть ли ведущие nuls или другие непечатаемые управляющие символы (довольно часто). То, что вы после, может быть «позади».

+0

И знаете ли вы, как создать специальный идентификатор для каждого компьютера? Потому что если я использую только процессор для HWID, у какого-то ПК может быть то же самое? После запуска программы я отправляю hwid на удаление php (post method) и проверяет его в базе данных, если да, я возвращаю его запрещенный или нет, если не запускается программа. если запретили его закрытие .. :) Вот почему его важно для меня, чтобы дать специальный идентификатор для каждого компьютера. – Vbnetguy

+0

Использовать аппаратный хэш - несколько фрагментов данных, склеенных вместе, хэшированных. То, что вы описали, может вызвать у вас проблемы с законами о конфиденциальности - хранение идентификаторов оборудования других людей. – Plutonix

+0

Да, это то, что я хочу несколько частей данных в одной строке и после создания хэша. Но у меня нет идеи получить какие-либо данные. Я имею в виду, что я получаю процессор, я не могу получить серийный номер материнской платы, потому что он возвращает nothink .. Что я могу использовать для этого? Это должно быть одинаково при каждом запуске программы, поэтому я пытаюсь сделать это с помощью hwid. – Vbnetguy

 Смежные вопросы

  • Нет связанных вопросов^_^