Chrono Mock
LangueFrançais

Une alternative à RunAsDate, avec les parties qui manquaient

RunAsDate est depuis des années la réponse à « exécuter ce programme à une autre date sous Windows », et une bonne réponse. Cette page porte sur ce qui distingue les deux, et sur les cas où RunAsDate reste le meilleur choix.

Côte à côte

 RunAsDateChrono Mock
Exécute une application à une fausse dateouioui
Laisse l'horloge système tranquilleouioui
Fonctions de temps interceptées544 (30 décalés, 14 comptés)
Horloge plus rapide que le temps réelnon proposétout multiplicateur entier
Figer l'horlogeoui, par défautoui
Sauter pendant que l'appli tourneseulement un retour à la date réelle, après un nombre de secondes fixéen avant et en arrière, vers n'importe quel moment
Fuseau horaire pour ce seul processusnon documentéoui, décalage fixe
Les processus enfants héritent de la sessionnon documentéoui
S'attacher à une application déjà lancéeoui, depuis la version 1.40non - il lance lui-même l'application
Plusieurs applications à des dates différentes en même tempsouinon - une session à la fois
Dit si cela a fonctionnénonverdict, par canal, avec nombre d'appels
Applications Electron et Chromiumnon documentémécanisme distinct
Ligne de commande pour la CIouioui, avec codes de sortie et JSON
Code sourcefreeware, ferméGPL-3.0
Taille47 Ko à télécharger, 57 Ko en 64 bits~2,4 Mo en ligne de commande, ~70 Mo avec la fenêtre
Anciennes versions de Windowsjusqu'à Windows 2000Windows 10 et 11

« Non documenté » signifie que la fonctionnalité n'est pas mentionnée sur la page de RunAsDate. Ce n'est pas une affirmation que l'outil en est dépourvu. L'horloge de RunAsDate reste figée tant que son option Move the time forward according to the real time n'est pas activée.

La différence qui compte le plus

Ce n'est pas le nombre de canaux. C'est que RunAsDate vous dit honnêtement, dans sa propre documentation, qu'il « n'affectera pas les applications qui obtiennent la date et l'heure courantes d'une autre source » - puis vous laisse déterminer si la vôtre en fait partie.

Chrono Mock traite cette même phrase comme quelque chose à mesurer. Chaque session se termine par un verdict, les canaux que l'application a réellement lus avec un compte pour chacun, les canaux manqués, et un avertissement quand on a vu l'application ouvrir une connexion réseau avant même d'avoir demandé l'heure à l'horloge.

Une application qui a l'air décalée dans le temps mais ne l'est pas est pire qu'une application qui ne s'est jamais lancée - elle produit un test réussi qui ne veut rien dire. Comment fonctionne l'audit →

Cinq fonctions, ou 44 canaux

RunAsDate intercepte GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime et GetSystemTimePreciseAsFileTime. Pour un très grand nombre d'applications, c'est réellement suffisant, car c'est là que l'horloge murale est lue.

Le reste de la surface est l'endroit où le code qui dépend des dates tend à se cacher :

  • le fuseau horaire - les deux fonctions qui l'indiquent, plus les six qui convertissent entre fuseaux, ce qui fait atterrir un rapport sur le mauvais jour
  • l'axe du temps écoulé - les compteurs de ticks et le temps d'interruption non biaisé, ce que mesure généralement un compte à rebours d'essai
  • les mises en sommeil, pour qu'un délai soit un délai sur l'horloge de la session et non sur l'horloge réelle, et les attentes sur objet, comptées et laissées à leur durée réelle
  • les minuteurs - attendables, de fenêtre, de pool de threads et multimédias
  • la création de processus, pour que les enfants d'un installateur s'exécutent dans la même session plutôt qu'à la date du jour
  • les connexions réseau, comptées comme le signe que l'heure peut venir d'un serveur

Sur les 44, 30 passent sur l'horloge de la session. Les 14 autres sont seulement comptés et restent réels, si bien que le rapport les cite sans prétendre qu'ils ont été décalés. L'horloge murale et le fuseau sont décalés dans chaque session. L'axe du temps écoulé et les attentes sont observés quand vous le demandez avec --scale-duration, le compteur haute résolution avec --scale-qpc.

Quand RunAsDate est le meilleur choix

Réellement, et pas rarement :

  • Vous avez besoin d'une date, à vitesse normale, tout de suite. RunAsDate est un téléchargement de moins de 60 Ko, n'a aucune fenêtre à apprendre et fait exactement cela depuis de nombreuses années.
  • Vous êtes sur un Windows plus ancien. RunAsDate remonte jusqu'à Windows 2000. Cet outil vise Windows 10 et 11 et n'est testé sur rien de plus ancien.
  • La taille compte. 47 Ko à télécharger contre ~2,4 Mo pour la ligne de commande, ou ~70 Mo avec la fenêtre, la comparaison n'est pas serrée.
  • Vous ne voulez pas de verdict. Mesurer la couverture, c'est lire le résultat. Si le test est jetable, c'est une charge que vous n'avez pas demandée.
  • L'application tourne déjà. RunAsDate sait s'attacher à un processus en cours depuis la version 1.40. Chrono Mock lance lui-même l'application, donc une application qu'on ne peut pas relancer est hors de sa portée.
  • Vous voulez plusieurs applications à des dates différentes en même temps. RunAsDate donne à chacune sa propre date. Chrono Mock mène une session à la fois.

Les deux peuvent aussi coexister. Rien ici ne vous empêche de garder RunAsDate pour le cas rapide.

Ce pour quoi aucun des deux n'est fait

Les deux outils apparaissent dans les recherches sur la prolongation des périodes d'essai. Celui-ci n'est pas conçu pour cela, et aucun exemple, scénario ou page ici ne le démontrera jamais. Chrono Mock sert à tester des logiciels dont vous êtes responsable - votre propre expiration de licence, votre propre logique de renouvellement, votre propre rapport de fin de mois.

C'est aussi le cas le moins susceptible de fonctionner. La protection de licence lit couramment l'heure par des voies choisies pour être difficiles à intercepter - la page de données partagée en mode utilisateur, les appels système directs, un serveur - et une horloge qui recule est une condition que ce code est écrit pour détecter. L'audit vous dira que cela n'a pas fonctionné, ce qui est la réponse honnête et non une réponse utile.

L'essayer