是否可以让我的应用程序显示一个时间,而不pipe系统时间是否被修改

另外我想问一下,如果我的应用程序没有运行,那么我可以创build一个守护进程来检查这个(假设这个进程一直运行)。

情况如下:用户将系统date从2012年1月1日更改为2013年1月1日,但应用程序仍应使用2012年1月1日。

我正在使用Windows操作系统

没有可靠的方法来跟踪时间而不依靠系统时间或从外部来源(网络服务或NTP),因为日期可能会以几种不同的方式被用户篡改。

你假设的后台服务跟踪时间选项不能防止重新启动时(例如从BIOS)的时间变化,那么保持内部时间的目的是什么? 它涉及到一个复制保护系统(如试用期限)?

如果是这样,你可以看看像CryptoLicensing这样的图书馆,声称有一个检测日期篡改 algoritm ,可以为你有用。

不过,我认为这种方式应该试着去检测日期/时间,而不是试图自己跟踪时间。

没有办法实现你所问的,至少我没有意识到。

我只是假设这是一个软件试用授权问题,如果是这样的话,有几个workarrounds,如

  • 因为它建议检查来自远程源的真实日期时间,一些安全的Web服务。

  • 限制试用版本不按时,但在执行计数,或保存计数。 将该值存储在加密文件内的注册表或用户临时文件夹中的某个位置。

希望这可以帮助。

您可以使用静态类在内部跟踪时间,如下面的内部日期时间类。 在程序开始时,用以下命令初始化它:

DateTime now = InternalDateTime.Now; 

你现在可以改变系统时间,并且有两个时间,也可以用来测量本地时钟漂移,如果你与时间服务器同步,这就是你的事情。

 MessageBox.Show( DateTime.Now.ToString()+Environment.NewLine+ InternalDateTime.Now.ToString()); 

并以相同的方式访问它,而不是使用DateTime.Now,使用InternalDateTime.Now它将保持时间,即使系统时间发生变化。

 public class InternalDateTime { private static volatile InternalDateTime _instance; private static object syncRoot = new Object(); //threadsafe singleton public static InternalDateTime Instance { get { if (_instance == null) { lock (syncRoot) { if (_instance == null) _instance = new InternalDateTime(); } } return _instance; } } private Stopwatch sw; private DateTime dtAppStart; private InternalDateTime() { dtAppStart = DateTime.Now; sw = new Stopwatch(); sw.Start(); } public static DateTime Now { get { return InternalDateTime.Instance.DateTimeNow; } } public DateTime DateTimeNow { get { return new DateTime(dtAppStart.Ticks).AddMilliseconds(sw.ElapsedMilliseconds); } } }