Como posso verificar se o usuário definiu o relógio?
-
20-09-2019 - |
Pergunta
No meu programa de desktop, quero verificar isso para ver se o usuário colocou o relógio de volta.
Para fazer isso, comparo o registro de data e hora de certos arquivos do sistema operacional com a data atual do computador. Se houver algum atrás do que o computador pensa ser a data atual, ele deve ter colocado o relógio de volta.
Para o Windows XP, eu tenho usado arquivos como:
c:\win386.swp
c:\windows\user.dat
and several others.
Duas questões:
É uma maneira decente de fazer isso ou há algo melhor?
(Supondo que a resposta para 1 seja "decente") Quais seriam alguns bons arquivos do Windows Vista e Windows 7 para comparar?
Conclusão: Priyank disse algo óbvio que me iludiu: em vez de usar qualquer arquivo do sistema, a maneira mais fácil e simples pode ser apenas usar o registro de data e hora do seu próprio programa. Afinal, a data em que foi instalada é exatamente a data em que você deseja que seu teste comece.
Acontece que suas respostas e minha pesquisa de outras perguntas relacionadas ao Stackoverflow e artigos mencionados me levaram a decidir sobre um esquema muito mais simples. Meus usuários de avaliação já precisam obter uma chave para usar o teste. Eu tenho a data registrada incorporada à chave. Eu realmente não tenho que verificar para definir o relógio de volta. Em vez disso, posso ver se o horário atual é entre a data registrada e a data registrada mais n dias.
Se eles querem se dar ao trabalho de contornar esse esquema, deixe -os. Eu concordo que essas pessoas não pagariam de qualquer maneira. Faça do seu programa algo que vale a pena que as pessoas gostem e querem usar e a maioria pagará.
Solução
Os arquivos do Windows sempre terão data anterior, o melhor é verificar a criação ou a data modificada do seu programa com a data do sistema. Ou sempre que seu programa pare, certifique -se de observar o registro de data e hora e compará -lo com a próxima vez que você iniciar seu programa, e sempre há NTP: http://en.wikipedia.org/wiki/network_time_protocol
Outras dicas
Uma maneira melhor de fazer isso no IMHO seria armazenar o registro atual no registro na primeira vez que seu programa é executado e compare isso com o registro de data e hora atual na próxima execução e atualize o registro de data e hora, se estiver tudo bem.
Esta não é uma resposta direta, apenas para oferecer alguma opinião e referências. Muito tempo para eu acrescentar como comentário.
Se o objetivo é criar um software com tempo limitado para uso de demonstração/avaliação, precisamos encontrar um equilíbrio entre o quanto você o implementa e a tendência para os usuários 'hackear' passá-lo.
Costumo dizer às pessoas, se seu software atrair hackers, provavelmente é algo útil/bom. Não há sentido em proteger um software que ninguém ache útil.
De qualquer forma, a conversa filosófica de lado, abaixo estão algumas boas leituras sobre este tópico:
Como implementar o estudo com limitação de tempo no fórum de Joel
TEMPO LIMITADO TEMPO LIMITE SO
Precisa de conselhos sobre a implementação de um estudo com limite de tempo SO
Uma opção seria obter a data de um serviço da Web ou servidor de tempo. O problema aqui é que isso só funciona se houver conexão à Internet disponível; portanto, esse seria apenas um método complementar para um mais seguro.
O Windows fornece APIs para notificação de alterações no tempo do sistema. Um por exemplo é o controle sysinfo.ocx ActiveX fornecido aqui.