0

How can I make my licence works only one year? When I activated my program I add registry with current date. On each run I check if the registry exist. If registry exists I can use my application otherwise it prompt me to activate it .

I want to make that my licence works only one year.

I tried with

    Public Sub Licence_Check()


    Dim licenca As Date
            Dim days As Integer
            licenca = CDate(My.Computer.Registry.GetValue("HKEY_CURRENT_USER\tFull", "tFull", Nothing))
        days = CInt(365 - (DateDiff(DateInterval.Day, licenca, Now)))

        If days <= 0 Then
            My.Computer.Registry.CurrentUser.DeleteValue("tFull")
            pbInfo.Value = pbInfo.Maximum
            gpbInfo.Text = "One year Licence OVER"
            RbContinue.Enabled = False
        End If
End Sub
Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Anel
  • 13
  • 2
  • 1
    Are you aware of the weakness of this approach? It is just a matter to use a Process Monitor to discover where your program stores this info and tamper with it. – Steve Oct 17 '14 at 10:29
  • @Steve this program will use computer begginers so its doesnt require high protection – Anel Oct 17 '14 at 10:30

1 Answers1

0

I have already warned you about the weakness of this approach, but this is how you could write the above License_Check

Public Sub Licence_Check()
    Dim licenca As Date
    Using tempKey = My.Computer.Registry.CurrentUser.OpenSubKey("Software\YourAppNameHere", true)
        licenca = CDate(tempKey.GetValue("InstallDate", Nothing))
        Dim limit = licenca.AddYears(1)
        if limit < DateTime.Today
            tempKey.DeleteValue("InstallDate")
            Console.WriteLine ("One year Licence OVER")
        End If
   End Using
End Sub

Notice that you should store your application info in a subkey of the SOFTWARE subkey and not directly under the root HKEY_CURRENT_USER. Then you need to open the appropriate subkey asking for the write permissions and finally read the value desidered.

To check the dates just add 1 year to the value read and do the check against Today. To delete you should use the DeleteValue method of the opened subkey.

Also I suppose that this is not a check that should be applied on a user by user base. Instead it is a check that could be applied to the whole application. In this case you should use the predefined My.Computer.Registry.LocalMachine registry key.

Steve
  • 213,761
  • 22
  • 232
  • 286