Posts
Ola Luiz Antonio, seja bem vindo ao DevMedia.
Bom, sua dúvida é relativamente simples.
Primeira vc deve criar um metodo que sera chamadao do Main em sua Class Lybrary que toda vez que ele é executado vc faz uma verificação de datas existente em algum lugar, vc pode gravar a data de expiração num Banco de Dados, num, arquivo txt criptografado ou numa chave de regsitro do windows.
E toda vez que a DLL for invocada, vc faz a verificação da data, caso seja expirada não executa os outros métodos da DLL.
Ao enviar a chave de registro e valida-la vc executa outro metodo que muda esta data para um valor tipo: "valido". Segue exemplo:
namespace ClassLibrary1
{
public class Class1
{
public void VerificaValidade()
{
string valorParametroExpiracao;
bool DataExpirada;
if (Descriptografar(valorParametroExpiracao) == "valido")
{
// executa os metodos pertinentes
}
else
{
if (DataExpirada)
{
// sair da dll
}
else
{
if (DataExpiracao - 8)
{
// vc tem 8 dias até a expiração do componente NONON, adquira sua licença
}
// executa os metodos pertinentes
}
}
}
}
}
Lembrando que este procedimento é o mais simples para desenvolvimento de componentes TRIAL, e o mesmo não pode ser burlado caso o usuário mude a data do sistema, o que não acontece caso seu componente fique num HOST, já que é uma aplicação WEB.
Aguardo seu retorno.
Espero ter ajudado e sucesso em sua aplicação.
Att
Luiz Maia
ERRATA,
"o mesmo pode ser burlado, caso o usuário troque a data..."
Att.
Luiz Maia
E ai Luiz, obteve sucesso?
Aguardo seu retorno.
Abraços
Luiz Maia
Olá Luiz,
Como não obtvemos resposta ou feedback do seu chamado, estamos concluindo o mesmo.
Continuamos a sua disposição.
Att,
Luiz Maia
O que não entendi mediante o exemplo que vc me passou é aonde nos métodos abaixo eu coloco os dados de data atual e data de expiração
public void VerificaValidade()
{
string valorParametroExpiracao;
bool DataExpirada;
if (Descriptografar(valorParametroExpiracao) == "valido")
{
// executa os metodos pertinentes
}
else
{
if (DataExpirada)
{
// sair da dll
}
else
{
if (DataExpiracao - 8)
{
// vc tem 8 dias até a expiração do componente NONON, adquira sua licença
}
// executa os metodos pertinentes
}
}
}
Teria como me exemplificar com datas e prazo de expiração pra eu entender melhor e você também fala de colocar na classe main foi outra coisa que não entendi e que a data poderia sêr alterada no host, mas no host não é só o Provedor que altera
Fico no aguardo e desde já agradeço e desculpe-me pela demora é que estava analizando o codigo
Olá Luiz,
Primeira coisa a fazer é, toda vez que vc for fazer uso de sua DLL, vc deve verificar a data de expiração, ou seja vc terá que chamar um método que funcionará como um filtro para uso da DLL, só assim vc poderá saber se sua DLL é válida ainda. (método abaixo VerificaValidade())
Depois vc deve ter outro metodo que valida a DLL, caso o usuário possua a chave, como no método abaixo VerificaChave, e alterar o arquivo onde vc guarda a data de expiração, caso o usuario entre com a chave correta.
Veja o esquema abaixo e faça as adequações para sua aplicação.
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary1
{
public class Class1
{
public void VerificaValidade()
{
string valorParametroExpiracao = "06/03/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados
// Se o valorParametroExpiracao for uma data maior que hj, a DLL pode ser usada até a data
// Se o valorParametroExpiracao for uma data "31/12/2099" (por exemplo), a DLL já foi liberada com a chave informada corretamente
if (Convert.ToDateTime(Descriptografar(valorParametroExpiracao)) > DateTime.Now)
{
MetodoDaSuaDll();
}
else
{
DllExpirada();
}
}
public bool VerifivaChave(string key)
{
// aqui vc verifica se a chave que ele digitou bate com a que vc envio e valida a DLL, ou não
if (key == "3216576513268432") // exemplo de chave valida
{
// ja que a chave é valida, vc deve alterar o valor da valorParametroExpiracao no lugar que vc gravou (arquivo txt, registro ou banco de dados)
return (true);
}
else
{
// exibe uma mensagem falando que a chave está errada
// vc tb pode contar o nº de tentativas e bloquear depois de algumas tentativas erradas.
return (false);
}
}
public void MetodoDaSuaDll()
{
// aqui faz todo o processo que o DLL é responsavel
}
public void DllExpirada()
{
// Informe aqui ao usuário que a data da expiração da DLL foi excedida
// e ele deve adquirir a licença agora e depois vc abandona a DLL sem executar o metodos dela
}
}
}
Qualquer dúvida, me avise.
Estou aguardando.
Abraços
Luiz Maia
Olá Consultor LUIZ, boa tarde me desculpe pela demora em testar e responder da outra vêz, vou procurar me agilizar nas próximas... até aproveitando sugeriria que fosse criado um sistema de alerta via e-mail dizendo que o consultor respondeu nossa resposta
Bem vamos as minhas novas duvidas baseado no último código que você me passou
Bem no Componente abaixo alterei algumas situações (já que ainda não há um componente de encriptação e decriptação definido ele estava dando erro mas dentro dele tenho algumas duvidas baseada numa webapp de teste que fiz
Bem vamos a elas (não que não esteja funcionando desta vêz funcionou)
Em Relação áo Componente (perceba que alterei um pouco o codigo) e nos comentários coloquei algumas duvidas extras
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.UI;
using System.IO;
using MinhaEmpresa.Trial;
namespace MinhaEmpresa.Trial
{
public class Validacao
{
public void VerificaValidade()
{
string valorParametroExpiracao = "07/02/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados
// Se o valorParametroExpiracao for uma data maior que hj, a DLL pode ser usada até a data
// Se o valorParametroExpiracao for uma data "31/12/2099" (por exemplo), a DLL já foi liberada com a chave informada corretamente
// if (Convert.ToDateTime(Descriptografar(valorParametroExpiracao)) > DateTime.Now)//LuizAntonio R:Comentei pois diz que o parâmetro Descriptografar está fora do contexto tendo que só para testes usar a de baixo
if(Convert.ToDateTime(valorParametroExpiracao) > DateTime.Now)
{
MetodoDaSuaDll();//LuizAntonio R: Aqui seria o meu Método mas como recebo os dados qdo necessário nele usado na minha webapp por ex.MedodoDaSuaDll(Label IDLabel, string texto, int numero, bool verdadeirooufalso) já que na minha webapp só aparece o VerificaValidate (o que é perfeitamente correto só tem que aparecer ele mesmo acredito eu)
}
else
{
DllExpirada();
}
}
public bool VerifivaChave(string key)
{
// aqui vc verifica se a chave que ele digitou bate com a que vc envio e valida a DLL, ou não
if (key == "3216576513268432") // exemplo de chave valida
{
// ja que a chave é valida, vc deve alterar o valor da valorParametroExpiracao no lugar que vc gravou (arquivo txt, registro ou banco de dados)
//Como Altero o valorParametroExpiracao(já que no caso ele teria que sêr um valor data infinito caso a chave fosse válida, acredito eu e não "31/12/2099" ou se usar "99/99/9999" seria a mesma coisa?) teria um video auto explicativo como fz td esse processo tanto do componente
//como da WebApp em que meu componente com chave trial será utilizado
return (true);
}
else
{
// exibe uma mensagem falando que a chave está errada
HttpContext.Current.Response.Write("Chave Inválida - Por Favor entre com outra chave");
// vc tb pode contar o nº de tentativas e bloquear depois de algumas tentativas erradas. LuizAntonio - R:Como eu faria essa rotina de contar o numero de tentativas e existiria tb algum metodo ou rotina por exemplo qdo o usuário colocou a data para frente e voltou para tráz para bloqueá-lo tb?
return (false);
}
}
public void MetodoDaSuaDll()//LuizAntonio - R:Onde está MetodoDaSuaDll() substituo por meuMetodo(string dado, Label IDLabel, bool verdadeirooufalse), et....ou seja o metodo de minha aplicação e em VerificaValidade() sou obrigado á colher os mesmos dados do método embutido se sim como repasso esses dados ao metodo embutido MetodoDaSuaDLL(string dado, Label IDLabel, bool verdadeirooufalse) quando necessário?
{
// aqui faz todo o processo que o DLL é responsavel
string testachave = string.Empty;
if (HttpContext.Current != null)
{
testachave = HttpContext.Current.Request.UserHostAddress;
HttpContext.Current.Response.Write(testachave);
}
}
public void DllExpirada()
{
// Informe aqui ao usuário que a data da expiração da DLL foi excedida
// e ele deve adquirir a licença agora e depois vc abandona a DLL sem executar o metodos dela
HttpContext.Current.Response.Write("Sua Dll foi expirada por favor adquira a licença");
}
//E como eu faria neste que agora tá agindo certinho, Aquele metodo de quando faltar determinados dias para a minha webapp expirar
//Aparecer uma msg onde faltam X dias para sua DLL expirar por favor adquira ou renove a licença
//pelo site....
}
}
No caso de minha WEb App que está consumindo o componente coloquei desta forma
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MinhaEmpresa.Trial;
namespace Teste
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Validacao protecao = new Validacao();
protecao.VerificaValidade();
//LuizAntonio R:e Na aplicação para o componente
//no meu método como receber os dados
//Enfim será necessário eu colocar algum input de dados tipo chave ou algo assim
}
}
}
Se possivel no próximo post não poderia haver algum vídeo explicativo de como seria td esse processo destas minhas últimas dúvidas
Fico no aguardo e desde já agradeço
Olá Luiz,
Procurei alguma vídeo aula sobre o assunto no Acervo da Dev Media, mas não possui. Vou encaminhar a sugestão para o pessoal de Video aula.
Bom vou tentar responder cada dúvida de uma vez:
1 - Quanto a criptografia, eu coloquei um nome fictício de um método, você pode criar um ou pegar algum já existente na web.
2 - Vc so precisa do metodo que verifica a validade da DLL mesmo, caso ela seja valida, vc executa os outros metodos
3 - No caso da data de expiração quando a chave digitada for valida, pode usar 31/12/2099, serão mais 80 anos de uso... acho que é suficiente!!!! rsrsr E outra coisa, se vc usar 99/99/9999 quando converter para DataTime vai dar uma excessão.
4 - Para contar o numero de tentativas que o usuario entrou com a chave para liberação da DLL vc pode criar um ID para cada versão da DLL distribuída e associar uma chave para cada uma, assim vc compara a quantidade de tentativas para uma determinada chave no mesmo dia, esta informação pode ser guardada numa base de dados.
5 - Para evitar que o usuário burle a data, alterando a data do sistema, vc pode gravar tb a data de instalação da DLL, e a data de cada vez que o usuario fizer uso da DLL, assim vc consegue verificar se ele voltou a data do computador verificando se a data da ultima vez que ele usou a DLL é maior que a data atual do PC do usuário.
6 - Quanto a mensagem de "quase expirando", vc deve verificar a cada uso da DLL a data atual e a data de expiração, quando vc ver se estão faltando poucos dias para expirar, vc manda a mensagem para o usuario, mas lembrando que ele ainda deverá ter acesso, pois ainda não expirou.
7 - Para validar a DLL, vc debve fazer um metodo e mostrar para o usuario, tipo uma pagina de registro, onde o usuario entra, digita a chave, vc compara com a chave enviada para aquele determinado ID, e faz a validação.
Abraços
E continuo a disposição de vc.
Att
Luiz Maia
Olá LUIZ, nas quatro resposta abaixo se for possivel já que ainda não entendi direito, se possivel poderia me passar em anexo algum projeto exemplo pronto, até o video ficar pronto outra sugestão que passo pro time da CONSULTORIA, seria usar um programa de ACESSO REMOTO tipo o LOGMEIN-FREE para interação com os usuários da CONSULTORIA o link do Logmein-Free segue abaixo
https://secure.logmein.com/home.asp?lang=pt
Aqui as respostas no qual ainda estou em duvida como proceder baseado no que vc já me passou
4 - Para contar o numero de tentativas que o usuario entrou com a chave para liberação da DLL vc pode criar um ID para cada versão da DLL distribuída e associar uma chave para cada uma, assim vc compara a quantidade de tentativas para uma determinada chave no mesmo dia, esta informação pode ser guardada numa base de dados.
5 - Para evitar que o usuário burle a data, alterando a data do sistema, vc pode gravar tb a data de instalação da DLL, e a data de cada vez que o usuario fizer uso da DLL, assim vc consegue verificar se ele voltou a data do computador verificando se a data da ultima vez que ele usou a DLL é maior que a data atual do PC do usuário.
6 - Quanto a mensagem de "quase expirando", vc deve verificar a cada uso da DLL a data atual e a data de expiração, quando vc ver se estão faltando poucos dias para expirar, vc manda a mensagem para o usuario, mas lembrando que ele ainda deverá ter acesso, pois ainda não expirou.
7 - Para validar a DLL, vc debve fazer um metodo e mostrar para o usuario, tipo uma pagina de registro, onde o usuario entra, digita a chave, vc compara com a chave enviada para aquele determinado ID, e faz a validação.
Olá Luiz,
Me desculpe a demora na resposta, tive problemas com a provedor de internet e fiquei "desplugado" por uns dias.
Quanto as suas sugestões, de video aula e Loggme in, favor encaminhar para o setor responsável ou para o email:
editordevmedia@gmail.com (Rogério)
Respostas
Item 4:
Cada versão de DLL que vc criar terá um ID (identificador) armazenado em sua base de dados numa tabela que terão os campos:
ID int
Key char(20)
NumTentativas int, por exemplo.
Quando o usuário tentar entrar com a chave, vc compara o ID da DLL com o ID do banco, e acrescenta mais uma tentativa na coluna NumTentativas na base de dados.
Item 5:
Na mesma tabela acima, vc pode guardar a data de instalação da DLL, e sempre eastar verificando se a data atual é menor que a data de instalação, caso seja, o usuário está tentando burlar a data do sistema. Mas como vc terá uma aplicação WEB, hospedada num servidor, pode esquecer isto, pois servidores nunca alteram as datas do sistema.
Item 6:
Na mesma tabela acima, vc pode tb guardar a data que a DLL vai expirar, e sempre que um metodo da DLL for invocado vc faz a verificação da data de expiração, caso esteja proximo ao vencimento, vc manda a mensagem para o usuário e continua o fluxo normalmente.
Item 7:
Para que o usuário possa validar a DLL, vc deve fazer um botão em algum lugar do seu sistema, faça uma pagina we para isto, tipo assim "Valide o Componente Blablabla aqui", quando o usuário entrar na pagina, ele verá os campos para digitar a chave, e ja sera exibido para ele o ID da dll, de posse destas duas informações, basta vc comparar na tabela e ver se esta correta ou nao, e lembrando de sempre acrescentar mais um na contagem das tentativas.
Segue uma sugestão para sua tabela de dados:
ID int
Key char(20)
Tentativas int
Data_instalacao Datatime
Data_expiracap Datetime
Nom_Cliente varchar(255)
Dll_Expirada bool
Dll_Validade bool
Abraços
Aguardo um retorno.
Att
Luiz Maia
No caso do ìtem 4
Item 4:
Cada versão de DLL que vc criar terá um ID (identificador) armazenado em sua base de dados numa tabela que terão os campos:
ID int
Key char(20)
NumTentativas int, por exemplo.
Aonde eu acho o ID da versão ou isso é um ID que eu criarei apenas na base de dados e ele tem que sêr relativo a que dado da DLL para eu comparar se fôr a versão aonde eu pego este dado na minha dll para comparar se for a chave é a chave que eu crio, enfim não teria um exemplo baseado no metodo já passado aonde eu embutiria ou colocaria esse metodo para me facilitar
Fico no aguardo e desculpe pelo tempo e paciencia que lhe tomo e desde já agradeço
Olá Luiz, blz?
Você pode fazer de duas formas, pode criar uma constante para cada versão de compilação de sua DLL:
const string key = "lkhkl23423234";
Ou, criar uma chave dentro do arquivo AssemblyInfo.cs (recomendado), como no assembly version, veja abaixo:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
E para recuperar vc deve usar o: using System.Reflection;
Abraços.
Att
Luiz Maia
E para recuperar vc deve usar o: using System.Reflection;
Olá LUIZ, bom dia, como faço essa recuperação teria algum exemplo de como eu fazer isso, já que é a primeira vêz que tento fz esse trial para web, fico no aguardo e desde já agradeço
E ai Luiz, tudo bom com vc?
Taí o código de recuperação dos parametros usados dentro do Arquivo AssemblyInfo.cs, desta forma vc recupera a versão, mas basta usar o Intellisense, que vc verá os outros métodos possíveis de recuperação:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ClassLibrary1
{
public class Class1
{
public string NomeChave()
{
return Assembly.GetAssembly(this.GetType()).GetName().Version.ToString();
}
}
}
Abraços
Att
Luiz Maia
Opa Luiz, tudo bom?
Resolveu seu problema? Aguardo seu retorno.
Abraços
Luiz Maia