1

您好,有一个提供 30 天试用期的应用程序。安装后,我正在添加一个具有当前DateTime.Now值的注册表项。

installDate = DateTime.Now;
RegistryKey regKeyAppRoot = Registry.CurrentUser.CreateSubKey(registryKeyPath); 
regKeyAppRoot.SetValue("InstallDate", installDate);

每当应用程序启动时,我都会从注册表中加载值并再次将其与当前DateTime.Now值进行比较,显然取决于比较的结果,我会显示适当的消息。

RegistryKey regKeyAppRoot = Registry.CurrentUser.CreateSubKey(registryKeyPath); 
installDate = (DateTime)regKeyAppRoot.GetValue("InstallDate");
if (installDate.AddDays(30) > DateTime.Now)
    ; //MessageBox.Show(...)

我的问题是系统时间的简单更改(到过去)只会允许再次使用应用程序,因为条件将不再满足。这可以解释为DateTime.Now 属性获取一个 DateTime 对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间。

我怎样才能避免这种情况并获得自安装应用程序以来的确切天数?

4

3 回答 3

0

一种简单的方法是在程序每次启动和退出时保存日期和时间。下一次启动将当前日期和时间与保存的日期和时间进行比较。如果它小于保存的,您的应用程序将拒绝启动。这当然不会完全消除这个问题,但它会让用户更难,因为他需要知道他需要将计算机设置为什么日期和时间。

于 2013-09-11T09:19:48.317 回答
0

您可以保存上次检查的日期并比较当前日期。如果他们在不同的日子,那么增加一个计数器。这样,用户“最多”可以使用 30 天。

所以...

DateTime lastCheck = ... // Recover it from the registry

DateTime now = DateTime.Now.Date;

if (now != lastCheck.Date)
{
    UsesCounter++;
}

lastCheck = now;

我会补充一点,通常使用起来会更好UtcNow,而不是Now,这样你就可以安全地避免日光时间的变化。

另一种选择是使用 Internet 时钟 :-) 有许多网站提供准确的时间(此选项只有在您的程序正常连接到 Internet 时才有用)

于 2013-09-11T09:20:41.723 回答
0

如果您节省时间,当您的应用程序结束时,您可以检查当前时间是否大于结束时间

于 2013-09-11T09:21:16.933 回答