2008-11-26 28 views
3

我想在启动程序时获取VB.NET或VB代码来访问硬盘序列号。这是为了帮助我保护我自己的软件免受试图盗版副本的人的影响。通过访问硬盘序列号来保护软件

+1

太苛刻了,查尔斯?我把它当作寻求帮助来找到操作系统调用来获取这些信息。 – Oddthinking 2008-11-26 01:43:40

回答

2

人们经常需要升级/更换硬盘。 更好地使用来自DMI的序列号。

3

我不能为您提供代码,对不起,但我提供了一个基于我以前在该地区的经验的警告。

许多许可系统使用的“硬盘序列号”实际上是写在磁盘上的软数字,而不是硬连线到硬件中。

使用“重影”软件快速生成许多台式机或使用虚拟化软件快速生成大量服务器的企业通常具有相同的硬盘驱动器标识。

所以要小心,如果你的目标是防止企业购买一个副本,并在许多机器上使用它(可能是无意的)。

7

在c#中,但你明白了。您需要为此使用System.Management:

string driveLetter = Environment.SystemDirectory.Substring(0, 2); 
string sn = new System.Management.ManagementObject("Win32_LogicalDisk.DeviceID=\"" + driveLetter + "\"").GetPropertyValue("VolumeSerialNumber").ToString(); 

正如其他人指出的,这可能不是处理此问题的最佳方法。但是,这是你的事。

1

事实上,我已经使用磁盘序列号来保护我的软件。

在vb 6.0中,我们可以创建和使用FileSystemObject。它允许访问硬盘驱动器的序列号,以及其他几个功能:

  • 显示每个硬盘
  • 创建,删除的使用和可用空间,移动文件夹
  • 复制文件和文件夹
  • 打印文本文件
  • ...等

注意,编写代码,并声明该对象之前,您必须ACTIVAT e

Project--> References --> Microsoft Scripting Runtime 

以下代码提取有关驱动器的一些信息,但您也可以提取驱动器的序列号。

Sub ShowDriveInfo(path) 
    Dim fso, drv, bytesPerGB, freeGB, totalGB, s 

    s = "" 
    bytesPerGB = 1024 * 1024 * 1024 

    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set drv = fso.GetDrive(fso.GetDriveName(path)) 

    s = s & drv.Path & " - " 

    if drv.IsReady Then 
     freeGB = drv.FreeSpace/bytesPerGB 
     totalGB = drv.TotalSize/bytesPerGB 

     s = s & FormatNumber(freeGB, 3) + " GB free of " 
     s = s & FormatNumber(totalGB, 3) + " GB" 
    Else 
     s = s & "Not Ready" 
    End If 
    s = s & "<br />" 

    document.write (s) 
End Sub 

如果您仍需要它,请在[email protected][email protected]下降了一张字条给我。我会给你发送源代码。

0

请在下面找到确切的回答你的问题:

Function ShowDriveInfo(drvpath) 
    Dim fso, d, s, t 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath))) 
    Select Case d.DriveType 
     Case 0: t = "Unknown" 
     Case 1: t = "Removable" 
     Case 2: t = "Fixed" 
     Case 3: t = "Network" 
     Case 4: t = "CD-ROM" 
     Case 5: t = "RAM Disk" 
    End Select 
    s = "Drive " & d.DriveLetter & ": - " & t 
    s = s & "<BR>" & "SN: " & d.SerialNumber 
    ShowDriveInfo = s 
End Function