我对这个问题的第一个解决方案是使用OS/BIOS计时器,并使用加密的日期文件(请参阅下面的伪代码)进行检查
public void CheckFrequently()
{
DateTime registeredDate = ReadFromBiosOrOSTimer();
DateTime readEncryptedDate = ReadFromEncryptedFile();
if(registeredDate >= readEncryptedDate)
{
ShowExpireDateForm();
CloseProgram();
}
}
在这种情况下,很明显,用户可以很容易地更改OS/BIOS定时器,而我的方法不起作用。
我的问题是:
- 有什么方法可以解决用户操作系统/BIOS计时器更改问题吗
- 有没有更好的方法来设置.Net项目的截止日期
(我的答案是假设你想要一个某种"过期"的程序。)
最终,一切都是老大哥的答案是从外部来源,比如网络服务,检索一个可信的时间。当然,连通性(或缺乏连通性)可能会使这成为不可能。
除此之外,他们知道如果有人要欺骗时钟,他们很可能会在接近到期时这样做,定期在某个地方写下当前时间的时间戳。如果您遇到检索到的(通过系统调用)时间小于上一个时间戳的情况,则可能有人试图欺骗时钟,您可以使用适当的错误消息使会话/实例无效。一旦你检测到"过期"的情况,很容易切换开关并拒绝再运行。
尽管如此,像这样的对策很可能总是被决心足够的对手击败