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
| RunAsDate | Chrono Mock | |
|---|---|---|
| Exécute une application à une fausse date | oui | oui |
| Laisse l'horloge système tranquille | oui | oui |
| Fonctions de temps interceptées | 5 | 44 (30 décalés, 14 comptés) |
| Horloge plus rapide que le temps réel | non proposé | tout multiplicateur entier |
| Figer l'horloge | oui, par défaut | oui |
| Sauter pendant que l'appli tourne | seulement 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 processus | non documenté | oui, décalage fixe |
| Les processus enfants héritent de la session | non documenté | oui |
| S'attacher à une application déjà lancée | oui, depuis la version 1.40 | non - il lance lui-même l'application |
| Plusieurs applications à des dates différentes en même temps | oui | non - une session à la fois |
| Dit si cela a fonctionné | non | verdict, par canal, avec nombre d'appels |
| Applications Electron et Chromium | non documenté | mécanisme distinct |
| Ligne de commande pour la CI | oui | oui, avec codes de sortie et JSON |
| Code source | freeware, fermé | GPL-3.0 |
| Taille | 47 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 Windows | jusqu'à Windows 2000 | Windows 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.