Execute um app do Windows em qualquer data - sem mexer no relógio do sistema
Coloque o relógio de um único aplicativo no ano que vem, congele-o, ou acelere o tempo para que um período de teste de 30 dias expire enquanto você faz um café. O resto da máquina continua com a hora real: seu login de domínio, seus certificados e todos os outros programas seguem normalmente.
Depois, ele diz se a substituição realmente funcionou.
Gratuito e de código aberto, GPL-3.0 Portátil ou instalado Sem direitos de administrador para executar Nunca se conecta à internet
Como é uma sessão
23:59:50
18:12:33
Por que isto existe
Testar qualquer coisa que dependa de data exige mover o tempo. As duas opções habituais são ruins.
Expiração de licença, períodos de teste, renovações de assinatura, validade de certificados, duração de tokens, fechamentos de fim de mês e de ano, cálculo de juros, lembretes.
Opção 1 - mudar o relógio do sistema
Isso quebra o login de domínio e o Kerberos, invalida certificados TLS a ponto de o navegador parar de funcionar, confunde o Windows Update e faz todos os outros aplicativos da máquina gravarem carimbos de data e hora errados. Em uma máquina ingressada em um domínio, a política de grupo normalmente bloqueia a mudança ou a reverte minutos depois, então o teste nem sequer é repetível.
Opção 2 - esperar
O que significa: não testar. Os casos que dependem de data são pulados, e “a licença nunca expira” vai para o cliente.
O que ele faz
Um processo viaja no tempo. Todo o resto da máquina, não.
Qualquer momento
Uma data e hora específicas, ou uma relativa - +30 days, -1 year.
Correndo, congelado ou acelerado
Velocidade normal, um relógio parado ou um multiplicador inteiro. x1440 transforma
um dia em um minuto.
Seu próprio fuso horário
Um deslocamento fixo só para aquele processo, enquanto o fuso do sistema fica exatamente onde estava.
Os processos filhos vão junto
Instaladores e inicializadores criam processos filhos. Sem isso, o teste cobre só metade do que rodou.
Saltos no meio da sessão
Para frente ou para trás - inclusive o salto para trás que um notebook dá depois de ressincronizar com um servidor de horário.
Electron e Chromium também
Por outro mecanismo, porque o relógio deles vive em um renderizador isolado que a injeção não alcança.
O que ninguém mais faz
Como saber se funcionou?
Com qualquer outra ferramenta, você não sabe. O aplicativo inicia, mostra uma data qualquer e você presume que está certo. Mas ele pode ler o relógio por um canal que a ferramenta nunca interceptou - de um servidor, de um banco de dados, por uma camada do ambiente de execução - e aí “o teste passou” não significa nada.
- →Um veredito antes de o teste de verdade começar: funciona / funciona parcialmente / não funciona
- →Quais dos 44 canais de tempo foram cobertos e quantas vezes o aplicativo consultou cada um
- →Quais não foram - ditos com clareza, nunca omitidos
- →Avisos com as consequências: “este aplicativo lê a hora da rede - a substituição local pode não bastar”
Dois minutos com ele
Uma janela para explorar, uma linha de comando para CI. O mesmo motor por trás das duas.
# Executar um aplicativo como se fosse o último segundo de 2027 chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:59 # Ver um teste de 30 dias expirar enquanto você faz um café: x1440 é um dia por minuto chrono run "C:\apps\test.exe" --mode x1440 # Usar um cenário com nome em vez de uma data e gravar a evidência em um arquivo chrono run "C:\apps\test.exe" --preset year-rollover --report session.txt
A calculadora responde à outra metade do teste de datas - qual data usar:
$ chrono calc --preset year-2038 --zone +00:00 Chrono Mock - date calculator preset: year-2038 - 2038 boundary explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)? base: 2038-01-19T03:14:07 result: 2038-01-19T03:14:07 formats: ISO date 2038-01-19 ISO datetime 2038-01-19T03:14:07+00:00 US 01/19/2038 PL 19.01.2038 epoch (s) 2147483647 epoch (ms) 2147483647000 FILETIME 137919572470000000 RFC 1123 Tue, 19 Jan 2038 03:14:07 GMT ... what this date lands on: at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)
Comparado com o que você provavelmente usa
Como o RunAsDate, com as partes que faltavam
O RunAsDate intercepta cinco funções do relógio de parede e faz isso bem. Veja onde os dois diferem - e a página completa também diz onde o RunAsDate ainda é a melhor escolha.
| RunAsDate | Chrono Mock | |
|---|---|---|
| Executa um app com uma data falsa | sim | sim |
| Canais de tempo interceptados | 5 | 44 (30 deslocados, 14 contados) |
| Acelerar o relógio | não | sim |
| Fuso horário independente | não documentado | sim |
| Acompanha processos filhos | não documentado | sim |
| Diz se funcionou | não | sim, por canal |
| Código-fonte disponível | freeware, fechado | GPL-3.0 |
Baixe
Descompacte em qualquer lugar e execute, ou instale o .msi assinado para todas as
contas da máquina. Executar não exige direitos de administrador e os zips não gravam nada no
registro.