1
回答
c/c++ 获取 windows时间(无网络状态下),保证获取时间的正确性(即使修改系统时间,重启)
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

想做一个客户端软件的使用时间限制,给客户一个序列号,保证比如在2014.1.5到2014.7.5半年内可以使用,时间到了,再给客户新的序列号。而且客户的软件是运行在无网络环境下,所以无法通过网络校验时间。

我的方法:

1. 给对方的序列号中加密包含了使用时间段 S ,经过解密后将 S 记录在系统的多个地方。

2. 另一个记录的是最后一次软件启动时间 R(第一次为软件安装的时间)

3. 每次启动软件时,取得启动时间 N , 并与 S比较

if(N包含在S内) {运行 } else {退出}


4. 为保证用户使用过程中,修改系统时间,采用无限逼近法。

(1)在每次退出软件时,将 N 与 R 比较

if(N>R) { R=N }   //更新R为最新时间

(2)在每次启动软件时,将 N 与 R 比较

if(R > N) {退出 } //说明中途已经修改了系统时间


问题:如何保证软件安装的第一次时间 R 的正确性?

情况1:修改好系统时间,重启再安装软件。

情况2:用户在装操作系统的时候就将时间修改了。

这样就无法保证第一次获取时间的正确性。


从系统日志的EventLog,6005的开机事件,和6006的关机事件。提取历史开机和关机时间进行对比,如果在不保证用户清楚日志的前提下,可以解决情况1。而且大多数用户不会如此,大多只会做做修改系统时间。防君子不防小人。针对情况1,还有种方法,就是读取需要频繁修改的系统文件,比如注册表文件的最后修改时间,利用FileTimeToSystemTime()转为系统日期格式。

但对于情况2,不知如何解决?或者说 如何保证软件安装的第一次时间 R 的正确性









<无标签>
举报
项伯羽
发帖于4年前 1回/1K+阅
顶部