zzm0163 发表于 2010-6-3 09:45:21

限制软件安装台数

我弄了安装程序,我想限制这个软件的安装台数,请问改怎么弄啊

例如 A软件,我想让他只装3台,3台后就不给使用了 。这个该怎么弄

wwant 发表于 2010-6-3 14:08:08

:face (14): 同等回答,不甚了了..

wgboy 发表于 2010-6-11 20:08:56

我有个思路, 不知道可否实现。。每次安装时生成个配置文件,然后记录下安装次数,再打包压缩到自身程序中。下次安装时再去检测此配置文件。。;

guland 发表于 2010-6-11 20:16:14

按照你这种要求用网络验证的方法来实现再方便不过了

lynfr8 发表于 2010-6-12 00:02:25

按照你这种要求用网络验证的方法来实现再方便不过了
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:21:53

本帖最后由 C.L 于 2010-6-12 11:23 编辑

网络认证方式如果没有连通网络就不能用了。
应该还有一种方法,就是在自身的二进制文件中,在最后加个一个二进制用作计数,每次软件运行,从这个地址读取数值,并加1,然后在结束时回写。我这种方法只是一个思路,我自已也没有形成代码,有兴趣的不妨试试。
我有空也想试试这种思路是不是行得通。

C.L 发表于 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

C.L 发表于 2010-6-12 15:21:22

出了点小错:
7# 第16行代码:
FileCopy ("test2.exe",$backupfile,1)

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

这样兼容性就好多了,忘了改过来了。

KLU3K 发表于 2010-6-12 18:28:12

不错,收藏了。

newuser 发表于 2010-6-13 07:22:00

回复 8# C.L
谢谢,先学习再收藏!

nxbigdaddy 发表于 2010-6-13 08:32:13

这样还是有问题啊,如果他复制了3份文件来安装呢?是不是就可以装9次呀?

我建议你给他U盘,U盘通过量产工具写一个特定的序列号,然后程序运行时读取,如果序列号正确,就运行安装,并且在计数。
这保证了安装文件的唯一性。

t87564833 发表于 2010-6-13 11:45:43

5楼,我的偶像出来了

waxy 发表于 2010-6-13 17:15:47

回复 8# C.L
我测了一下,好像没用;第N次运行都提示“第一次运行”,编译成EXE文件测试出是一样。

menfan1 发表于 2010-6-14 12:08:10

防火墙禁止网络通信呢?

风行者 发表于 2010-6-14 19:49:50

不错,收藏了
页: [1] 2
查看完整版本: 限制软件安装台数