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:
Se o usuário alterar a data do computador ele burla o mecanismo de controle;
O arquivo de controle fica inicialmente na pasta \bin\Debug da aplicação talvez colocá-lo em outro local ou armazenar as informações no registro talvez fosse mais adequado;
Se o usuário localizar e apagar o arquivo de controle ele burla o sistema;
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: