在我的桌面程序中,我想检查用户是否已将时钟调回。

为此,我将某些操作系统文件的时间戳与当前计算机日期进行比较。如果有任何晚于计算机认为的当前日期,那么他一定已经将时钟调慢了。

对于 Windows XP,我一直使用以下文件:

c:\win386.swp
c:\windows\user.dat
and several others.

两个问题:

  1. 这是一个不错的方法吗,还是有更好的方法?

  2. (假设 1 的答案是“不错”)有哪些好的 Windows Vista 和 Windows 7 文件可供比较?


结论:普里扬克说了一些我听不懂的话:最简单的方法可能是仅使用程序本身的时间戳,而不是使用任何系统文件。毕竟,它的安装日期正是您希望试用的开始日期。

事实证明,您的回答以及我对其他相关 StackOverflow 问题和提到的文章的研究使我决定采用一个更简单的方案。我的试用用户已经必须获得密钥才能使用试用版。我已将注册日期嵌入到密钥中。我真的不需要检查是否将时钟拨回。相反,我可以查看当前时间是否在注册日期和注册日期加 n 天之间。

如果他们想不厌其烦地绕过这个计划,那就随他们去吧。我同意那些人无论如何都不会付钱。让您的程序变得有价值,让人们喜欢、想要使用,并且大多数人愿意付费。

有帮助吗?

解决方案

Windows 文件总是有较早的日期,最好是用系统日期检查程序的创建或修改日期。或者,每次程序退出时,请务必记下时间戳并将其与下次启动程序时进行比较,并且始终存在 NTP: http://en.wikipedia.org/wiki/Network_Time_Protocol

其他提示

恕我直言,更好的方法是在程序第一次运行时将当前时间戳存储在注册表中,然后将其与下次运行时的当前时间戳进行比较,如果一切正常则更新时间戳。

这不是直接回答,只是提供一些意见和参考。我太长了,无法添加评论。

如果目的是创建一个有时间限制的软件以供演示/试用,我们需要在实施它的程度和用户“破解”它的倾向之间找到平衡。

我经常告诉人们,如果你的软件吸引了黑客,那么它可能是有用的/好的。保护一个没有人觉得有用的软件是没有意义的。

不管怎样,撇开哲学讨论不谈,下面是一些关于这个话题的好读物:

如何实施限时试用 在乔尔的论坛上
限时试用和 Windows 认证 上SO
需要有关实施限时试用的建议 上SO

一种选择是从网络服务或时间服务器获取日期。这里的问题是,这只有在有互联网连接可用的情况下才有效,因此这只是更安全的补充方法。

Windows 提供了用于通知系统时间更改的 API。一个例如是否提供了 sysinfo.ocx activex 控件 这里.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top