C#获取系统时间,非DateTime方法
看到这个名字先不要笑,可能看多人认为获取系统时间不简单吗?System.DateTime.Now,直接就能获取了,要是这么简单我也就不用写这篇文章了。事情是这样的,我前段时间写了软件,现在是希望这个软件到达一定时间后就不允许运行,只能重新下载安装新的版本,如果仅仅是用System.DateTime.Now,获取系统时间,是不可靠的,因为用户完全可以改变系统时间,把时间往后面前调整一下就行了,我的方法是让软件读取系统临时文件夹下面文件的创建时间,这里面的文件时间和当前实际时间最为接近,当然如果把系统先修改,在这之后生成的临时文件的创建时间肯定又是不准确的,为了解决这个问题,我们可以多判断几个文件夹,比如系统文件夹(C:/Windows、C:/Winodws/System32等等这些文件会经常更新),这样获取到的时间也就较为准确,下面一段C#编写的代码,代码很简单:

|
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.IO; using System.Windows.Forms; namespace getTmie { public partial class Form1 : Form { public Form1() { InitializeComponent(); } DateTime MaxDateTime; private void btngetTmie_Click(object sender, EventArgs e) { try { string pathtext = System.Environment.GetEnvironmentVariable("TEMP").Trim(); if (pathtext == null || pathtext.Equals("")) { //MessageBox.Show("路径不能为空", "错误"); } else { //得到文件名 string[] filename = Directory.GetFiles(pathtext); foreach (string file in filename) { //得到文件的创建时间 DateTime CreationTime = File.GetCreationTime(file); if (CreationTime > MaxDateTime) { MaxDateTime = CreationTime; } } //进行二个文件夹验证 pathtext = System.Environment.GetEnvironmentVariable("WINDIR").Trim(); filename = Directory.GetFiles(pathtext); foreach (string file in filename) { //得到文件的创建时间 DateTime CreationTime = File.GetCreationTime(file); if (CreationTime > MaxDateTime) { MaxDateTime = CreationTime; } } //进行三个文件夹验证 pathtext = System.Environment.GetEnvironmentVariable("WINDIR").Trim() + "/Temp"; filename = Directory.GetFiles(pathtext); foreach (string file in filename) { //得到文件的创建时间 DateTime CreationTime = File.GetCreationTime(file); if (CreationTime > MaxDateTime) { MaxDateTime = CreationTime; } } //第四个文件夹 pathtext = System.Environment.SystemDirectory.Trim(); filename = Directory.GetFiles(pathtext); foreach (string file in filename) { //得到文件的创建时间 DateTime CreationTime = File.GetCreationTime(file); if (CreationTime > MaxDateTime) { MaxDateTime = CreationTime; } } MessageBox.Show(MaxDateTime.ToString()); //这里是输出时间,自己看,在软件中应该和指定的时间进行比较 } } catch { //MessageBox.Show("请检查路径是否正确", "系统提示"); } } } } |
为了防止用户找到对应的破解方法,下面几点注意,可以增加破解的难度:
1、 像上面代码一样,多判断几个文件夹,不能光靠判断临时文件夹。
2、 在程序中检测的时候不能只检测一次,应该多检测几次,在运行的过程中检测,另外就是检测到时间不符合要求的时候不要急于给出提示或关闭程序,应该用个变量记录下来,再让另外的函数定期访问变量来检测,这样做的目的是防止程序被爆破,当然绝对的防止程序被爆是不可能的,我们只能增加爆破难度。
3、 当程序检测到时间不符合要求的时候,往系统比较隐蔽的目录中写入一个标志文件,用来标记当前的实际时间已经不符合软件的要求,这样当用户卸载掉软件,重新安装的时候,很容易就能判断出实际时间是不是符合要求。
上面的方法都是无赖之举,但是要比System.DateTime.Now获取到系统时间更靠得住,获取时间最好的方法还是从网络中获取,这样可以做到比较精确,我编写的程序时单机版,不需要依靠网络运行,所以通过网络的方式不太方便。
本文来源 我爱IT技术网 http://www.52ij.com/jishu/1355.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
