2012-06-25 2 views
1

Я делаю пробную версию моего проекта vb .net, но не считает дни, дату и время.Выполнение пробной версии программы

Можете ли вы дать мне какие-либо предложения по его исправлению. Я использую следующий код:

Public Class Form1 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim intTime As Integer = 1 
    Dim dteLastStart, dteStartDate As Date 
    Dim blnFirstTime, blnEnabled As Boolean 
    Dim lngTimeLeft As Long 

    blnEnabled = True 
    If dteStartDate = Nothing Then 
     dteStartDate = Now 
    End If 

    My.Application.SaveMySettingsOnExit = True 


    If DateDiff(DateInterval.Day, dteLastStart, Now) < 0 Then 
     'First clock change 
     If intTime = 1 Then 
      MsgBox("FRED has detected that you have changed your system date to an earlier date" & vbCrLf & "As FRED has built-in security," & vbCrLf & "FRED will only run until the next intTime you change your system date", MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation, "System Date Changed") 
      intTime = 2 
     ElseIf intTime = 2 Then 
      'Second clock change 
      blnEnabled = False 
      MsgBox("FRED has detected that you have changed your system date to an earlier date" & vbCrLf & "As this is the second warning, FRED will now be disabled", MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation, "System Date Changed") 
     End If 
     'disables app 
     If blnEnabled = False Then 
      If MsgBox("FRED is disabled", MsgBoxStyle.OkOnly Or MsgBoxStyle.Information, "Disabled") = MsgBoxResult.Ok Then 
       For Each form As Form In My.Application.OpenForms 
        form.Close() 
       Next 
      End If 
     End If 
    End If 

    If DateDiff(DateInterval.Day, dteStartDate, Now) > 29 Then 
     blnEnabled = False 
     If blnEnabled = False Then 
      If MsgBox("FRED has reached the end of it's trial.", MsgBoxStyle.OkOnly Or MsgBoxStyle.Information, "Trial Ended") = MsgBoxResult.Ok Then 
       'Close all open forms 
       For Each form As Form In My.Application.OpenForms 
        form.Close() 
       Next 
      End If 
     End If 
    End If 
    dteLastStart = Now 
    If blnFirstTime = True Then 
     blnFirstTime = False 
    End If 
    'Saves variable settings 
    My.Settings.Save() 

    lngTimeLeft = 29 - (DateDiff(DateInterval.Day, dteStartDate, Now)) 

    MsgBox("This is a 29-day trial version." & vbCrLf & "You have " & CStr(lngTimeLeft) & " days left.", MsgBoxStyle.OkOnly, "FRED Trial") 
end sub 
end class 
+0

ну, я не вижу, откуда dteLastStart получает значение. То, что я предлагаю сделать, находится в первом запуске, за исключением значения datetime в реестре в некотором закодированном виде. Затем на каждом прогоне потяните это значение и сравните его. – eddyuk

+0

может у PLZ сказать мне, как сохранить значение даты времени в реестре – user1473832

ответ

2

Предположим, что ваша программа называется MyProg, и вы хотите, чтобы пользователь пробовал ее в течение 7 дней.

Таким образом, концептуально, вы будете иметь запись в реестре:

HKLM\SOFTWARE\MyProg 

Каждый запуск программного обеспечения, вы должны проверить, если она существует, если нет, при условии, что это первый запуск, и вы будете создавать запись и заданное значение. Если запись существует, вы получите значение и сравните его.

Нет для кодирования, вот пример функции, которая обрабатывает реестр и возвращает ложь, если дата истечения срока действия или верно, если еще испытательный период:

Private Function HandleRegistry() As Boolean 
     Dim firstRunDate As Date 
     firstRunDate = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\MyProg", "FirstRun", Nothing) 
     If firstRunDate = Nothing Then 
      firstRunDate = Now 
      My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\MyProg", "FirstRun", firstRunDate) 
     ElseIf (Now - firstRunDate).Days > 7 Then 
      Return False 
     End If 
     Return True 
    End Function 

Нет все, что вам нужно сделать, это вызвать его и обработать ответ :

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Dim result As Boolean = HandleRegistry() 
     If result = False Then 'something went wrong 
      MsgBox("Trial expired") 
     Else 
      MsgBox("Trial version") 
     End If 
    End Sub 

конечно, это только пример, так что вы получите эту идею, но практичности я бы кодировать дату и регистр звонков ввода имени что-то еще, так что не будет дружественным к пользователю. Кроме того, помните о проблеме архитектуры, чтобы вы знали, где она написана.

Надеюсь, что поможет

+0

Thanx Я проверяю, работает ли он – user1473832

+0

Я хотел бы попросить еще одну вещь от u plz – user1473832

+0

, если я поставлю оба эти кода, которые вы сказали мне как ответ. Будет ли моя программа испытанием, срок действия которого истечет через 7 дней? – user1473832

Смежные вопросы