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: