CloseMaxScript6 对脚本做时间控制

客户希望对脚本进行时间控制

需要在最低的成本下实现如下场景:

  • 试用,给用户3天试用
  • 在硬件绑定的情况下控制期限,比如月卡、年卡等等

方案1:

在前置动作中,启动时判断注册表或文件是否存在,
不存在则写入开始时间,存在则判断当前时间和开始时间差,大于多少天则返回false

缺点:

  1. 系统文件可以被控制 (无法改进)
  2. 系统时间可以被修改 (可通过网络时间获取)

方案2(推荐):

在前置动作中,硬写入可使用的时间段,硬要求联网,适合月激活、年激活等场景

缺点:

  1. 需要联网
  2. 需要按周期发布(但也是最节省成本的方案了)

此方案配合硬件绑定,按周期为用户更换脚本

fn getNetworkTime =
(
    local netTime = ""
    try
	(
        local request = (dotnetClass "System.Net.WebRequest").Create "http://www.baidu.com"
        request.Timeout = 2000
        local response = request.GetResponse()
        local dateStr = response.Headers.Get "date"
        response.Close()
        
        netTime = dateStr
    ) 
	catch 
	(
        print "获取网络时间失败,请检查网络连接。"
		--赋一个早一点时间
		cult = (dotNetClass "System.Globalization.CultureInfo").InvariantCulture
		netTime = (dotNetObject "System.DateTime" 2000 01 01).ToString "ddd, dd MMM yyyy HH:mm:ss 'GMT'" cult
    )
    return netTime
)

fn test = 
(
	cult = (dotNetClass "System.Globalization.CultureInfo").InvariantCulture
	
	--获取当前网络时间
	netNowStr = getNetworkTime()
	netNow = (dotnetClass "System.DateTime").ParseExact netNowStr "ddd, dd MMM yyyy HH:mm:ss 'GMT'" cult
	
	netTime = (netNow.ToString "yyyyMMdd") as integer
	--修改这个,写死过期时间
	beginDate = 20250101
	endTime = 20270101
	--判断网络时间是否在有效范围内
	if netTime < beginDate do
	(
		format "错误:网络时间(%)小于开始时间(%) \n" netTime beginDate
		return false
	)
	if endTime < netTime do
	(
		format "过期:结束时间(%)小于当前网络时间(%) \n" endTime netTime
		return false
	)
	print "正常使用"
	return true
)

test()
--下面不要编写其他代码
posted @ 2026-01-08 13:47  trykle  阅读(0)  评论(0)    收藏  举报