VB .NET - Controlando o período de avaliação (Versão Demo)


Hoje eu vou mostrar um esboço de um projeto cujo objetivo é controlar o tempo de utilização de uma versão de avaliação.

Eu disse esboço por que o projeto não esta completo e precisa ser melhorado e resolver alguns problemas.

Mesmo assim ele pode lhe dar uma ideia de qual caminho trilhar se um dia você precisar criar algo parecido.

Vamos então ao projeto...

Usando o Visual Basic 2010 Express Edition foi criado um novo projeto do tipo Windows Forms Application com o nome ControlandoTempoUsoVB;

A seguir no menu Project clique em Add Class e informe o nome Versao.vb;

A seguir defina o código abaixo nesta classe:

Imports System.IO
Public Class VersaoTeste
    Private m_DiasUsados As Integer = 0
    Private m_MaximoDias As Integer = 30
    Private m_Terminou As Boolean = False
    Private m_NomeArquivo As String = vbNullString
    Public ReadOnly Property DiasUsados As Integer
        Get
            'retorna o no de dias usados
            Return m_DiasUsados
        End Get
    End Property
    Public ReadOnly Property DiasRestam As Integer
        Get
            'Retorna o numero de dias que faltam
            Return (MaximoDias - m_DiasUsados)
        End Get
    End Property
    Public Property NomeArquivo As String
        Get
            Return m_NomeArquivo
        End Get
        Set(ByVal value As String)
            'define o nome do arquivo
            m_NomeArquivo = value
            'verifica se o arquivo de verificacao foi encontrado
            If Not File.Exists(NomeArquivo) Then
                'cria o arquivo de versao
                If Not AtualizaArquivo(Now.Date.AddDays(MaximoDias), 0) Then
                    Throw New FileNotFoundException
                    Exit Property
                End If
            End If
            'verifica a data
            VerificaData(Now.Date)
        End Set
    End Property
    Public ReadOnly Property Expirou As Boolean
        Get
            Return m_Terminou
        End Get
    End Property
    Public Property MaximoDias As Integer
        Get
            Return m_MaximoDias
        End Get
        Set(ByVal value As Integer)
            m_MaximoDias = value
        End Set
    End Property
    Private Sub VerificaData(ByVal Date1 As DateTime)
        Dim sr As StreamReader = Nothing
        Dim Date2 As DateTime = Nothing
        Dim Flag As Integer = 0
        Dim Tmp As String = vbNullString
        Try
            sr = New StreamReader(NomeArquivo)
            'Le o conteudo do arquivo
            Tmp = XorString(sr.ReadToEnd())
            'fecha o arquivo
            sr.Close()
            'Le a flag de versao
            Flag = Integer.Parse(Tmp(0))
            'le a data
            Date2 = Tmp.Substring(1)
            'verifica se a versão expirou
            If (Flag <> 0) Then
                m_DiasUsados = MaximoDias
                m_Terminou = True
            Else
                'Retorna o numero de dias usados
                m_DiasUsados = MaximoDias - DateDiff("d", Date1, Date2) + 1
                'verifica se esta no intervalo
                m_Terminou = (DiasUsados <= 0) Or (DiasUsados > MaximoDias)
            End If
        Catch ex As Exception
            m_DiasUsados = MaximoDias
            m_Terminou = True
        End Try
        If Expirou Then
            m_DiasUsados = MaximoDias
            'Adiciona a data e flag de fim de versão
            AtualizaArquivo(Date2, 1)
        End If
    End Sub
    Private Function AtualizaArquivo(ByVal DataFinal As DateTime, ByVal Flag As Integer) As Boolean
        Dim sw As StreamWriter = Nothing
        'Formato do arquivo é o seguinte: flag,data
        'flag 0 = versao esta ainda no intervalo de dias permitidos para testes
        'flag 1 = a versão expirou
        Try
            sw = New StreamWriter(NomeArquivo)
            'Escreve a data e flag de versao
            sw.Write(XorString(Flag & DataFinal.Date))
            'fecha o arquivo
            sw.Close()
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function
    Private Function XorString(ByVal source As String) As String
        Dim sb As New System.Text.StringBuilder()
        Rnd(-1)
        'Define uma semente randomica.
        Randomize(1830)
        For Each c As Char In source
            'Encripta
            Dim b As Byte = Asc(c) Xor Int(Rnd() * 256) Mod 255
            'Anexa o Char ao stringbuilder.
            sb.Append(Chr(b))
        Next c
        'Retorna string
        Return sb.ToString()
    End Function
End Class

Esta classe define os métodos para controlar o período de avaliação de uma versão definindo o tempo máximo de avaliação e partir dai vai controlando quanto tempo falta para terminar o período de avaliação.

Ela cria uma arquivo com conteúdo criptografado na qual define a data final do período e uma flag que indica se o período expirou ou não.

A classe define as seguintes propriedades e métodos:

Como usar a classe ?

A seguir vejamos como usar a classe definida acima...

No formulário form1.vb defina o seguinte código:

Imports System.IO
Public Class Form1
    Private MinhaVersaoTeste As New VersaoTeste()
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With minhaVesaoTestes
            'Define o numero maximo de dias para testes.
            .MaximoDias = 30
            'esconde o arquivo 
            .NomeArquivo = Path.Combine(Application.StartupPath, "ver.sys")
            'verifica se o periodo de avaliação expirou
            If .Expirou Then
                exibeMensagem("Seu periodo de " & .MaximoDias & " dias de testes terminou.")
            Else
                exibeMensagem("Você já usou " & .DiasUsados & " dia(s) do intervalo de " & .MaximoDias & " dias de avaliação.")
            End If
        End With
    End Sub
    Private Sub exibeMensagem(ByVal msg As String)
        MessageBox.Show(msg, "Versão-Demo", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub
End Class

O código acima cria uma instância da classe VersaoTeste() e no evento Load do formulário utiliza as propriedades e métodos do objeto MinhaVersaoTeste().

Executando o projeto após essas definições teremos:

 

Como eu disse este projeto é um esboço e precisa ser melhorado. Vou deixar então o que precisa ser feito para torná-lo realmente funcional:

Bem, apesar desses problemas creio que o projeto ainda seja útil para lhe dar um ideia de como iniciar um tratamento de controle de tempo de uso de uma aplicação.

 

Agora o resto é com você....

 

Pegue o projeto completo aqui: ControlandoTempoUsoVB.zip

Rom 10:8 Mas que diz? A palavra está perto de ti, na tua boca e no teu coração; isto é, a palavra da fé, que pregamos.

Rom 10:9 Porque, se com a tua boca confessares a Jesus como Senhor, e em teu coração creres que Deus o ressuscitou dentre os mortos, será salvo;

Rom 10:10 pois é com o coração que se crê para a justiça, e com a boca se faz confissão para a salvação.

Rom 10:11 Porque a Escritura diz: Ninguém que nele crê será confundido.

Referências:


José Carlos Macoratti