Buongiorno. Ho un'applicazione VB.Net che implementa un blando sistema di autodifesa dalla copia non autorizzata, mediante un controllo sul numero di serie dell'HD. Questo il succo del codice:
Private Function GetDiskId() As String
Try
Dim moSrc As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Index=0")
Dim moCol As ManagementObjectCollection = moSrc.Get()
Dim mo As ManagementObject = moCol(0)
Dim sn As String = mo.GetPropertyValue("SerialNumber")
Return sn
Catch ex As Exception
MessageBox.Show("*LD* " & ex.ToString)
Return ""
End Try
End Function
Su molti PC fa il suo dovere, nel senso che restituisce una stringa univoca. Su una sola maledetta macchina solleva l'errore di cui allego una foto. Su CodeProject e StackOverflow ho trovato dei post sull'argomento, ma non una spiegazione chiara con relativa soluzione.
Qualcuno mi può dare una mano? Grazie.
P.S.:
Ho provato anche le seguenti varianti, con lo stesso esito:
Dim moSrc As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive") 'senza indice
Dim moSrc As New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
Allegati: