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

簡単な方法の 1 つは、プログラムを開始して終了するたびに日付と時刻を保存することです。次回の開始時に、現在の日付と時刻が保存されている日付と時刻と比較されます。保存された値よりも小さい場合、アプリケーションは起動を拒否します。これで問題が完全に解決されるわけではありませんが、コンピュータを設定する必要がある日付と時刻を知る必要があるため、ユーザーにとっては困難になります。

于 2013-09-11T09:19:48.317 に答える
0

時間を節約すると、アプリケーションが終了したときに、現在の時間が終了した時間よりも大きいことを確認できます

于 2013-09-11T09:21:16.933 に答える
0

最後のチェックの日付を保存して、現在の日付を比較できます。それらが異なる日にある場合は、カウンターを増やします。このようにして、ユーザーは「最大」30 日間使用できます。

そう...

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

DateTime now = DateTime.Now.Date;

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

lastCheck = now;

UtcNow通常はではなくを使用する方が少し良いと付け加えておきます。Nowこのようにすると、夏時間の変更から安全になります。

もう 1 つのオプションは、インターネット クロックを使用することです :-) 正確な時刻を提供するサイトは多数あります (このオプションは、プログラムが通常インターネットに接続している場合にのみ適しています)。

于 2013-09-11T09:20:41.723 に答える