C# 无论systime是否已修改,我的应用程序是否可以显示时间

C# 无论systime是否已修改,我的应用程序是否可以显示时间,c#,windows,operating-system,C#,Windows,Operating System,另外,我想问一下,如果我的应用程序没有运行,那么我是否可以创建一个守护进程来对此进行检查(假设该进程一直运行) 情况是这样的: 用户将系统日期从2012年1月1日更改为2013年1月1日,但应用程序仍应使用2012年1月1日 我使用的是Windows操作系统。无法实现您的要求,至少我知道 我只是想这是一个软件试用许可问题,如果是的话,有几个工作区,比如 正如有人建议的那样,检查来自远程源的实时数据,一些安全的web服务 限制试用版不在时间上,而是在执行计数或保存计数上。将该值存储在加密文件的注

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

情况是这样的: 用户将系统日期从2012年1月1日更改为2013年1月1日,但应用程序仍应使用2012年1月1日


我使用的是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服务、中央服务器等)获取时间,而不是从本地机器获取时间。我忘了提到我不希望任何外部来源同步时间