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
4

1 に答える 1

2

「MyProg」というプログラムで、ユーザーに7日間試してもらいたいとします。

したがって、概念的には、レジストリにエントリがあります。

HKLM\SOFTWARE\MyProg

ソフトウェアを実行するたびに、存在するかどうかを確認する必要があります。存在しない場合は、最初の実行であると想定して、エントリを作成し、値を設定します。エントリが存在する場合は、値を取得して現在と比較します。

コーディングはできません。レジストリを処理し、日付が期限切れの場合はfalseを返し、まだ試用期間の場合はtrueを返す関数の例を次に示します。

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

もちろん、これは単なる例であるため、アイデアは得られますが、実用的には、日付をエンコードし、レジストリ名のエントリを別の名前で呼び出すため、ユーザーフレンドリーではありません。また、アーキテクチャの問題を覚えておいて、どこに書かれているかがわかるようにしてください。

お役に立てば幸い

于 2012-06-25T08:43:38.327 に答える