Chrono Mock
LangueFrançais

Faire tourner l'horloge d'une appli plus vite

Un essai de 30 jours met 30 jours à expirer, à moins de pouvoir déplacer le temps. Le conseil habituel est d'avancer l'horloge système, ce qui exige des droits d'administrateur et entraîne avec lui tous les autres programmes de la machine. Ceci déplace un seul processus.

À quelle vitesse

Choisissez un multiplicateur entier. L'horloge de l'application avance autant de fois plus vite que la réelle, à partir du moment où la session démarre.

MultiplicateurUne minute réelle devientUtile pour
x60une heureles tâches horaires, les délais d'expiration de session, la durée de vie des jetons
x1440un jourles bascules quotidiennes, un essai de 30 jours en une demi-heure
x43200un essai de 30 joursvoir tout l'essai se terminer pendant que vous lisez ceci
x525600un anles renouvellements annuels, l'expiration des certificats
x1000000environ 1,9 anle plafond
# Partir de l'heure réelle actuelle, et avancer d'un jour par minute
chrono run "C:\apps\test.exe" --mode x1440

# Partir d'une date choisie et accélérer à partir de là
chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440

# Tenir l'horloge complètement immobile à la place
chrono run "C:\apps\test.exe" --mode frozen
Un enregistrement d'une session pilotant une autre application Windows. La fenêtre de gauche est Chrono Mock, où l'horloge de l'application, au 2038-01-19, grimpe à soixante fois la vitesse réelle tandis que l'horloge réelle à côté n'avance que de quelques secondes. La fenêtre de droite est l'application testée, dont le propre journal de session montre qu'elle a démarré le 2038-01-19 et tourne depuis des minutes alors qu'à peine une demi-minute s'est écoulée dans la pièce.
Une vraie session, pilotant une vraie application. Regardez la fenêtre de droite : le programme testé a enregistré son propre démarrage au 19 janvier 2038, et sa session a duré des minutes alors que l'horloge de la pièce n'a avancé que de quelques secondes. La vitesse est changée pendant l'exécution, sans rien redémarrer.

Ce qui piège les gens : il y a deux horloges

Accélérer l'horloge murale - ce que renvoient DateTime.Now et ses équivalents - n'accélère pas à elle seule un compte à rebours. Ce sont deux questions différentes qu'une application peut poser au système d'exploitation, et beaucoup de logiciels mesurent « trente jours » avec la seconde plutôt qu'avec la première.

L'axe des durées - compteurs de ticks, attentes, mises en veille et minuteurs - est donc un interrupteur distinct :

  • --scale-duration met aussi les compteurs de ticks, les mises en sommeil et les minuteurs sur l'horloge de la session, tandis que les attentes sur objet sont comptées et gardent leur durée réelle. Sans lui, x1440 fait filer le calendrier pendant qu'un minuteur de cinq secondes dure toujours cinq vraies secondes - seul un minuteur réglé sur une date et une heure suit l'horloge de la session dans chaque session.
  • --scale-qpc met en plus à l'échelle le compteur haute résolution. C'est là que Python 3.13+ monotonic, .NET Stopwatch et Java nanoTime lisent le temps écoulé, et il est désactivé par défaut parce que sa mise à l'échelle a déstabilisé le rendu lors des tests.

Si le multiplicateur semble ne rien faire à un compte à rebours, c'est presque toujours la raison.

# Une appli minuteur : accélérer le calendrier ET les comptes à rebours
chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration

# Une appli Python ou .NET qui mesure le temps écoulé sur le compteur haute résolution
chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc

Changer de vitesse sans redémarrer

Le multiplicateur peut changer en pleine session, et l'horloge est réancrée plutôt que sautée, si bien qu'elle ne recule jamais quand la vitesse baisse. Vous pouvez aussi faire sauter l'horloge d'un coup - en avant, ou en arrière comme le fait un portable après s'être resynchronisé avec un serveur de temps, ce qui est le cas qui casse tout ce qui mesure le temps écoulé sans garde-fou.

# Tourner à x60, puis passer à x1440 au bout de deux secondes
chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440

# Tourner, puis faire sauter l'horloge à un moment choisi au bout de cinq secondes
chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00

Ce qu'il ne fera pas

  • Il ne touche pas à l'horloge système. C'est le but, pas une limite - mais cela signifie que tout ce qui lit l'heure sur un serveur, une base de données ou une autre machine n'est pas affecté, et l'audit vous le dit quand cela arrive.
  • Un saut change ce que l'application voit, pas le moment où elle se réveille. Les mises en sommeil et les minuteurs déjà confiés au noyau gardent la durée qu'ils ont reçue au moment où ils ont été réglés. La plupart des applications interrogent l'horloge, donc les sauts fonctionnent en pratique - mais pas pour toutes.
  • Il ne ralentit pas le temps. Les multiplicateurs sont des nombres entiers de un et plus, plus une horloge figée à zéro.

Que quoi que ce soit ait atteint votre application n'est pas une chose à supposer. La session le dit →

L'essayer