限制软件安装台数
我弄了安装程序,我想限制这个软件的安装台数,请问改怎么弄啊例如 A软件,我想让他只装3台,3台后就不给使用了 。这个该怎么弄 :face (14): 同等回答,不甚了了.. 我有个思路, 不知道可否实现。。每次安装时生成个配置文件,然后记录下安装次数,再打包压缩到自身程序中。下次安装时再去检测此配置文件。。; 按照你这种要求用网络验证的方法来实现再方便不过了 按照你这种要求用网络验证的方法来实现再方便不过了
guland 发表于 2010-6-11 20:16 http://www.autoitx.com/images/common/back.gif
非常赞成
同时给个思路
没有服务器的朋友怎么做网络验证呢?
其实很简单
大把网络资源可以用来做网络验证的“主服务器”
举个例子
开通一个博客
在博客编辑一篇文章当作网络验证名单
里面格式为:
允许安装软件的外网Ip地址1=ok
允许安装软件的外网Ip地址2=ok
允许安装软件的外网Ip地址3=ok
.....
那么在客户端安装软件的时候
首先获取外网ip
然后通过正则读取这个网页
并对比是否包含在允许安装软件的外网Ip地址
如果包含
则继续安装
否则
取消安装并退出
这个我在做一个共享软件的时候就用到了
虽然不是万全之策
但最起码能防住一般的用户破解 本帖最后由 C.L 于 2010-6-12 11:23 编辑
网络认证方式如果没有连通网络就不能用了。
应该还有一种方法,就是在自身的二进制文件中,在最后加个一个二进制用作计数,每次软件运行,从这个地址读取数值,并加1,然后在结束时回写。我这种方法只是一个思路,我自已也没有形成代码,有兴趣的不妨试试。
我有空也想试试这种思路是不是行得通。 研究了一下,按上面6#思路做了个例子,图方便没有用API来读写文件,如果能用API来读写,效率要高很多,不过,这里只是提供思路,就懒得用API了;需编译后才能正常运行,因更改文件有2秒左右延时,
;所以测试时,关闭程序后,需2秒以后重新运行才能正常显示结果
Dim $backupfile = @TempDir &"\test0.exe",$stoptimes = 3
$x = _count ()+1
If $x > 4 Then
MsgBox (16,"","运行已达"&$stoptimes&"次")
Exit
Else
MsgBox (0,"","第"&$x&"次运行本程序")
EndIf
If @Compiled Then _Selfcopy (2)
Func _count()
If @Compiled Then
FileCopy ("test2.exe",$backupfile,1)
$SelfSize = FileGetSize ($backupfile)
$hOF = FileOpen ($backupfile,16)
FileRead ($hOF,$SelfSize-12)
$count = FileRead ($hOF,12)
FileClose ($hOF)
$scount = BinaryToString ($count)
If Not StringInStr ($scount,"count") Then
$newcount = StringToBinary("count0")
$fwreturn = FileWrite(FileOpen($backupfile, 17), $newcount)
Return 0
ElseIf StringInStr ($scount,"count") Then
$times = StringRight($scount,1)
If $times > $stoptimes-2 Then
Return 10
Else
$times += 1
$hOF = FileOpen($backupfile, 17)
FileWrite($hOF, StringToBinary ($times))
FileClose($hOF)
EndIf
Return $times
EndIf
EndIf
EndFunc
Func _Selfcopy($iDelay = 0)
Local $sCmdFile
FileDelete(@TempDir & "\scratch.bat")
$sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
& ':loop' & @CRLF _
& 'copy /y "'& $backupfile &'" "' & @ScriptFullPath & '" > nul' & @CRLF _
& 'del ' & $backupfile & @CRLF _
& 'del ' & @TempDir & '\scratch.bat'
FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
Run(@TempDir & "\scratch.bat", @TempDir,@SW_HIDE)
EndFunc
出了点小错:
7# 第16行代码:
FileCopy ("test2.exe",$backupfile,1)
应为:
FileCopy (@ScriptFullPath,$backupfile,1)
这样兼容性就好多了,忘了改过来了。 不错,收藏了。 回复 8# C.L
谢谢,先学习再收藏! 这样还是有问题啊,如果他复制了3份文件来安装呢?是不是就可以装9次呀?
我建议你给他U盘,U盘通过量产工具写一个特定的序列号,然后程序运行时读取,如果序列号正确,就运行安装,并且在计数。
这保证了安装文件的唯一性。 5楼,我的偶像出来了 回复 8# C.L
我测了一下,好像没用;第N次运行都提示“第一次运行”,编译成EXE文件测试出是一样。 防火墙禁止网络通信呢? 不错,收藏了
页:
[1]
2