This is the way it has to go. DateTime.Now returns the current time from the client's machine and you cannot ignore this fact about .NET.
What you can do is, to get the DateTime from your own server to work on. This would minimize the error of getting the inaccurate time. Try using DateTime.UtcNow to get the Utc timing on your own server. This way, you can save the actual datetime on your server and the user's datetime in a seperate AppData folder's file. Where you compare the datetime before each execution.
But there are many other methods for fetching the accurate date time, have a look at
this[
^] website. You can get time from there too.
But even the DateTime.UtcNow that was executed on the client's computer will give the DateTime object that will be converted to Utc type of the DateTime object returned from his system's datetime.
Remember: You cannot prevent the user from doing anything. Windows would allow him to, its your job to be as much pessimist to be sure about these things. He will do many evil things that you need to be carefull about :D