有没有什么办法只让程序在特定的u盘中运行?

harrydragon 2003-09-08 09:36:22
开发了一个小程序,但需要进行保密管理,我是想限制程序只能在特定一个u盘中运行,但想不出怎么实现,如果高手们有什么办法,请赐教,不胜感激!!如果有其他的限制程序运行的方法也行。谢谢!!
...全文
376 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjwolf 2010-06-15
  • 打赏
  • 举报
回复
上述方法都不行,如果不用连体的USBKEY的方式,很快就会被复制。上面用序列号锁定U盘用的是软序列号,格式化时给的一串码,如果在DBR中手动改过来,或者更简单,直接克隆一枚U盘,连破解都不用。笔者开发过这类程序,没而技术壁垒。如果就硬序列号,U盘的杂牌子根本没有,况且取硬序列号编程上复杂得多,兼容性也就问题。
现在很多USBKEY都可以,开发成本也不高,可以去查一下。
harrydragon 2003-09-09
  • 打赏
  • 举报
回复
对不起!TechnoFantasy(www.applevb.com) ,我给分时看错行了。:(
harrydragon 2003-09-09
  • 打赏
  • 举报
回复
谢谢各位大侠。:)
叶帆 2003-09-09
  • 打赏
  • 举报
回复
我的u盘是611454092
'返回文件系统信息
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

'*************************************************************************
'**函 数 名:getSeriorNumber
'**输 入:sRoot(String) - 逻辑盘符 如: C: D:
'**输 出:(Long) - 序列码
'**功能描述:返回磁盘的序列号
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2003年04月19日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Function getSeriorNumber(sRoot As String) As Long
Dim lSerialNum As Long
Dim R As Long
Dim strLabel As String, strType As String
strLabel = String$(255, Chr$(0)) '磁盘卷标
strType = String$(255, Chr$(0)) '文件系统类型 一般为 FAT
R = GetVolumeInformation(sRoot, strLabel, Len(strLabel), lSerialNum, 0, 0, strType, Len(strType))
getSeriorNumber = lSerialNum '在 strLabel 中为 磁盘卷标 '在 strType 中为 文件系统类型
End Function
叶帆 2003-09-09
  • 打赏
  • 举报
回复
用这个API看看它有没有序列号
【声明】
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
【说明】
获取与一个磁盘卷有关的信息
【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError
【参数表】
lpRootPathName - String,欲获取信息的那个卷的根路径

lpVolumeNameBuffer - String,用于装载卷名(卷标)的一个字串

nVolumeNameSize - Long,lpVolumeNameBuffer字串的长度

lpVolumeSerialNumber - Long,用于装载磁盘卷序列号的变量

lpMaximumComponentLength - Long,指定一个变量,用于装载文件名每一部分的长度。例如,在“c:\component1\component2.ext”的情况下,它就代表component1或component2名称的长度

lpFileSystemFlags - Long,用于装载一个或多个二进制位标志的变量。对这些标志位的解释如下:
FS_CASE_IS_PRESERVED
文件名的大小写记录于文件系统
FS_CASE_SENSITIVE
文件名要区分大小写
FS_UNICODE_STORED_ON_DISK
文件名保存为Unicode格式
FS_PERSISTANT_ACLS
文件系统支持文件的访问控制列表(ACL)安全机制
FS_FILE_COMPRESSION
文件系统支持逐文件的进行文件压缩
FS_VOL_IS_COMPRESSED
整个磁盘卷都是压缩的

lpFileSystemNameBuffer - String,指定一个缓冲区,用于装载文件系统的名称(如FAT,NTFS以及其他)

nFileSystemNameSize - Long,lpFileSystemNameBuffer字串的长度


harrydragon 2003-09-08
  • 打赏
  • 举报
回复
我也是这么想的,如果有象硬盘一样的序列号就好了。到底有没有,有的话又怎么读出来????
踏平扶桑 2003-09-08
  • 打赏
  • 举报
回复
我想U盘也有像序列号之类唯一标示的东西吧
如果能搞到的话进行判断就行了
harrydragon 2003-09-08
  • 打赏
  • 举报
回复
另:我是个vb新手,对Shikari、TechnoFantasy两位大侠提到的方法还不太懂,请两位高手介绍的详细些,或者有例程最好。再一次的感谢。
jlum99 2003-09-08
  • 打赏
  • 举报
回复
晕了,还要防止拷贝啊???那就有点麻烦了
harrydragon 2003-09-08
  • 打赏
  • 举报
回复
但是我怎么知道是我指定的u盘,不是他自己买的一个一摸一样的?!
hisi 2003-09-08
  • 打赏
  • 举报
回复
好多星星啊??
@$#$*&@#^$*&
TechnoFantasy 2003-09-08
  • 打赏
  • 举报
回复
楼上好办法 :-)
Shikari 2003-09-08
  • 打赏
  • 举报
回复
获取U盘的容量,当程序运行时,用APP。PATH判断所在盘的容量是否等于U盘容量,应该就可以了!
TechnoFantasy 2003-09-08
  • 打赏
  • 举报
回复
通过app.Path 可以得知程序当前运行的路径,根据这个路径得到的驱动器名再判断这个驱动器是否移动驱动器。然后再用其它一些方法判断是否是U盘。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧