C# 无论systime是否已修改,我的应用程序是否可以显示时间
另外,我想问一下,如果我的应用程序没有运行,那么我是否可以创建一个守护进程来对此进行检查(假设该进程一直运行) 情况是这样的: 用户将系统日期从2012年1月1日更改为2013年1月1日,但应用程序仍应使用2012年1月1日C# 无论systime是否已修改,我的应用程序是否可以显示时间,c#,windows,operating-system,C#,Windows,Operating System,另外,我想问一下,如果我的应用程序没有运行,那么我是否可以创建一个守护进程来对此进行检查(假设该进程一直运行) 情况是这样的: 用户将系统日期从2012年1月1日更改为2013年1月1日,但应用程序仍应使用2012年1月1日 我使用的是Windows操作系统。无法实现您的要求,至少我知道 我只是想这是一个软件试用许可问题,如果是的话,有几个工作区,比如 正如有人建议的那样,检查来自远程源的实时数据,一些安全的web服务 限制试用版不在时间上,而是在执行计数或保存计数上。将该值存储在加密文件的注
我使用的是Windows操作系统。无法实现您的要求,至少我知道 我只是想这是一个软件试用许可问题,如果是的话,有几个工作区,比如
- 正如有人建议的那样,检查来自远程源的实时数据,一些安全的web服务
- 限制试用版不在时间上,而是在执行计数或保存计数上。将该值存储在加密文件的注册表或用户临时文件夹中的某个位置
希望这能有所帮助。不依赖系统时间或外部来源(web服务或NTP),没有可靠的方法来记录时间,因为用户可能会以几种不同的方式篡改日期 您假定的使用后台服务跟踪时间的选项无法防止在重新启动期间(例如从BIOS)发生时间更改,因此保留内部时间的目的是什么? 是否与副本保护系统有关(如试用期限) 如果是这样的话,你可以看看一个类库,它声称有一个检测日期篡改算法,对你很有用
但是,我认为应该尝试检测日期/时间变化,而不是自己跟踪时间…您可以使用静态类在内部跟踪时间,如下面的内部日期-时间类。在程序开始时,使用以下命令初始化程序:
DateTime now = InternalDateTime.Now;
您现在可以更改系统时间,并将这两个时间都放在手边,还可以用于测量本地时钟漂移,如果您与时间服务器同步,这就是您的事情
MessageBox.Show(
DateTime.Now.ToString()+Environment.NewLine+
InternalDateTime.Now.ToString());
并以相同的方式访问它,而不是使用DateTime。现在,使用InternalDateTime。现在
即使系统时间发生变化,它也会保持时间不变
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);
}
}
}
解决方法:从另一个来源(web服务、中央服务器等)获取时间,而不是从本地机器获取时间。我忘了提到我不希望任何外部来源同步时间