Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在windows中获取系统时间更改?_C#_.net_Vb.net_Cmd_Event Log - Fatal编程技术网

C# 在windows中获取系统时间更改?

C# 在windows中获取系统时间更改?,c#,.net,vb.net,cmd,event-log,C#,.net,Vb.net,Cmd,Event Log,可能重复: 我正在编写一个试用申请,试用期为30天 为了给用户预留30天,我需要检查系统时间的变化 例如,如果用户在系统日期和时间上加上两天,则不会影响试用期,并且通过从DateTime.now中减去时间更改,试用期将保持30天 我通过读取事件日志找到了一种方法,但我需要一个管理权限来执行此操作,而这并不总是可用的 有没有一种方法可以在不需要管理权限的情况下获取此类信息?您可以使用记录第一天日期的数据库,而不是查找系统时间的更改,并计算第一天之后的30个时间跨度 因此,当用户第一次打开应用程

可能重复:

我正在编写一个试用申请,试用期为30天

为了给用户预留30天,我需要检查系统时间的变化

例如,如果用户在系统日期和时间上加上两天,则不会影响试用期,并且通过从DateTime.now中减去时间更改,试用期将保持30天

我通过读取事件日志找到了一种方法,但我需要一个管理权限来执行此操作,而这并不总是可用的


有没有一种方法可以在不需要管理权限的情况下获取此类信息?

您可以使用记录第一天日期的数据库,而不是查找系统时间的更改,并计算第一天之后的30个时间跨度

因此,当用户第一次打开应用程序时,您必须查询数据库以添加今天的日期(第一次打开的日期)和今天之后的30天(第一次打开的日期)

获取今天和之后30天的日期, 使用DateTime.Now函数

        string Today = DateTime.Now.Day + " - " + DateTime.Now.Month + " - " + DateTime.Now.Year;
        string End = DateTime.Now.AddDays(30).Day + " - " + DateTime.Now.AddDays(30).Month + " - " + DateTime.Now.AddDays(30).Year;
上述方法的缺点是,如果用户在2070年开始他的应用程序。那么他的申请要到2070年才会到期

因此,最好是从网上获取日期
不要从用户的计算机获取日期。

您可以通过保存剩余天数来尝试,安装
datetime
并最后检查
datetime
。确保在安装时设置了这两个选项

当用户启动程序时

if (lastCheck > DateTime.Now)
    {
         lastCheck = DateTime.Now;
    }
else
    {
         remainingDays = (DateTime.Now - lastCheck).TottalDays;
    }
如果没有进一步的修改,这将不鼓励用户修改日期,因为这将减少用户在设置日期时的剩余时间。您可以通过编写更多的代码来避免这种情况。 我认为这相当简单,但效率很高

编辑:我可能误解了这个问题

我看不出有什么方法可以做到这一点,而不需要代码过度使用。 最重要的是保护你的应用程序不被破解/盗用。如果用户想玩这个日期,那就是他们的损失


如果由于应用程序的性质,这是意料之中的事情,那么应该在应用程序完成之前处理。

您是否考虑过使用许可证密钥将应用程序“呼叫总部”,而不是依赖系统时间?或者可能使用NTP服务器?另外,您是否考虑过这样的用户实际上购买您的软件的可能性有多大?(想想你想在这方面投入多少努力,与它在销售中实际产生的影响相比。)谢谢@JonSkeet,但我认为在一切就绪后,我现在无法改变架构,除了这个bug。非常感谢:)再说一遍,你认为你会因为这个问题损失多少销售额?在这件事上花多少精力才是真正值得的?复制品:,和。一般的回答是:根本不要这样做,或者尽可能简单(即,将安装日期存储在寄存器或文件中)。您的“安全性”将被任何真正想要的用户破坏。@CodeCaster,感谢您的回复,我不是为了安全而写,我写这篇文章是为了让用户自由更改时间,如夏令时和其他人为因素错误。如果我想为了安全而写,我相信您的答案将是完美的。谢谢:)如果我在安装前将系统时间更改为2020年,该怎么办?这行得通吗?日期时间的时间跨度是从公元0001年1月1日00:00:00(午夜)到公元9999年12月31日(公元前)晚上11:59:59。应该没问题。