找回密码
 加入
搜索
查看: 7950|回复: 20

[AU3基础] 限制软件安装台数

 火.. [复制链接]
发表于 2010-6-3 09:45:21 | 显示全部楼层 |阅读模式
我弄了安装程序,我想限制这个软件的安装台数,请问改怎么弄啊

例如 A软件,我想让他只装3台,3台后就不给使用了 。这个该怎么弄
发表于 2010-6-3 14:08:08 | 显示全部楼层
同等回答,不甚了了..
发表于 2010-6-11 20:08:56 | 显示全部楼层
我有个思路, 不知道可否实现。。每次安装时生成个配置文件,然后记录下安装次数,再打包压缩到自身程序中。下次安装时再去检测此配置文件。。;
发表于 2010-6-11 20:16:14 | 显示全部楼层
按照你这种要求用网络验证的方法来实现再方便不过了
发表于 2010-6-12 00:02:25 | 显示全部楼层
按照你这种要求用网络验证的方法来实现再方便不过了
guland 发表于 2010-6-11 20:16



非常赞成
同时给个思路
没有服务器的朋友怎么做网络验证呢?
其实很简单
大把网络资源可以用来做网络验证的“主服务器”
举个例子
开通一个博客
在博客编辑一篇文章当作网络验证名单
里面格式为:
允许安装软件的外网Ip地址1=ok
允许安装软件的外网Ip地址2=ok
允许安装软件的外网Ip地址3=ok
.....
那么在客户端安装软件的时候
首先获取外网ip
然后通过正则读取这个网页
并对比是否包含在允许安装软件的外网Ip地址
如果包含
则继续安装
否则
取消安装并退出

这个我在做一个共享软件的时候就用到了
虽然不是万全之策
但最起码能防住一般的用户破解

评分

参与人数 1金钱 +20 收起 理由
C.L + 20 学习了

查看全部评分

发表于 2010-6-12 11:21:53 | 显示全部楼层
本帖最后由 C.L 于 2010-6-12 11:23 编辑

网络认证方式如果没有连通网络就不能用了。
应该还有一种方法,就是在自身的二进制文件中,在最后加个一个二进制用作计数,每次软件运行,从这个地址读取数值,并加1,然后在结束时回写。我这种方法只是一个思路,我自已也没有形成代码,有兴趣的不妨试试。
我有空也想试试这种思路是不是行得通。
发表于 2010-6-12 15:13:15 | 显示全部楼层
研究了一下,按上面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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +50 贡献 +10 收起 理由
lynfr8 + 50 + 10 很棒的见解

查看全部评分

发表于 2010-6-12 15:21:22 | 显示全部楼层
出了点小错:
7# 第16行代码:
FileCopy ("test2.exe",$backupfile,1)

应为:
FileCopy (@ScriptFullPath,$backupfile,1)

这样兼容性就好多了,忘了改过来了。
发表于 2010-6-12 18:28:12 | 显示全部楼层
不错,收藏了。
发表于 2010-6-13 07:22:00 | 显示全部楼层
回复 8# C.L
谢谢,先学习再收藏!
发表于 2010-6-13 08:32:13 | 显示全部楼层
这样还是有问题啊,如果他复制了3份文件来安装呢?是不是就可以装9次呀?

我建议你给他U盘,U盘通过量产工具写一个特定的序列号,然后程序运行时读取,如果序列号正确,就运行安装,并且在计数。
这保证了安装文件的唯一性。
发表于 2010-6-13 11:45:43 | 显示全部楼层
5楼,我的偶像出来了
发表于 2010-6-13 17:15:47 | 显示全部楼层
回复 8# C.L
我测了一下,好像没用;第N次运行都提示“第一次运行”,编译成EXE文件测试出是一样。
发表于 2010-6-14 12:08:10 | 显示全部楼层
防火墙禁止网络通信呢?
发表于 2010-6-14 19:49:50 | 显示全部楼层
不错,收藏了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-24 04:01 , Processed in 0.134110 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表