Eine RunAsDate-Alternative, mit den Teilen, die fehlten
RunAsDate ist seit Jahren die Antwort auf „dieses Programm unter Windows mit einem anderen Datum ausführen“, und eine gute. Diese Seite handelt davon, wo sich die beiden unterscheiden und wo RunAsDate weiterhin die bessere Wahl ist.
Nebeneinander
| RunAsDate | Chrono Mock | |
|---|---|---|
| Führt eine Anwendung mit falschem Datum aus | ja | ja |
| Lässt die Systemuhr in Ruhe | ja | ja |
| Abgefangene Zeitfunktionen | 5 | 44 (30 verschoben, 14 gezählt) |
| Uhr schneller als Echtzeit | nicht angeboten | jeder ganzzahlige Faktor |
| Uhr einfrieren | ja, standardmäßig | ja |
| Springen, während die App läuft | nur zurück zum echten Datum, nach einer festen Zahl von Sekunden | vorwärts und rückwärts, zu jedem beliebigen Zeitpunkt |
| Zeitzone nur für diesen Prozess | nicht dokumentiert | ja, fester Offset |
| Kindprozesse erben die Sitzung | nicht dokumentiert | ja |
| An eine bereits laufende Anwendung anhängen | ja, seit Version 1.40 | nein - es startet die Anwendung selbst |
| Mehrere Anwendungen mit verschiedenen Daten gleichzeitig | ja | nein - eine Sitzung zur Zeit |
| Sagt, ob es gewirkt hat | nein | Urteil, pro Kanal, mit Aufrufzahlen |
| Electron- und Chromium-Anwendungen | nicht dokumentiert | eigener Mechanismus |
| Kommandozeile für die CI | ja | ja, mit Exit-Codes und JSON |
| Quellcode | Freeware, closed source | GPL-3.0 |
| Größe | 47 KB Download, 57 KB für 64 Bit | ~2,4 MB Kommandozeile, ~70 MB mit Fenster |
| Ältere Windows-Versionen | bis zurück zu Windows 2000 | Windows 10 und 11 |
„Nicht dokumentiert“ heißt, dass die Funktion auf der RunAsDate-Seite nicht erwähnt wird. Es ist keine Behauptung, dass dem Werkzeug die Funktion fehlt. Die Uhr von RunAsDate steht, solange seine Option Move the time forward according to the real time nicht aktiviert ist.
Der Unterschied, der am meisten zählt
Es ist nicht die Zahl der Kanäle. Es ist, dass RunAsDate in seiner eigenen Dokumentation ehrlich sagt, dass es „Anwendungen nicht beeinflusst, die das aktuelle Datum bzw. die aktuelle Uhrzeit aus einer anderen Quelle beziehen“ - und Ihnen dann überlässt herauszufinden, ob Ihre eine davon ist.
Chrono Mock behandelt genau diesen Satz als etwas, das man misst. Jede Sitzung endet mit einem Urteil, den Kanälen, die die Anwendung tatsächlich gelesen hat, mit einer Zahl je Kanal, den verfehlten Kanälen und einer Warnung, wenn die Anwendung dabei beobachtet wurde, wie sie eine Netzwerkverbindung öffnete, bevor sie je die Uhr gefragt hat.
Eine Anwendung, die zeitverschoben aussieht, es aber nicht ist, ist schlimmer als eine, die nie gestartet ist - sie liefert einen bestandenen Test, der nichts bedeutet. So funktioniert die Prüfung →
Fünf Funktionen oder 44 Kanäle
RunAsDate fängt GetSystemTime, GetLocalTime,
GetSystemTimeAsFileTime, NtQuerySystemTime und
GetSystemTimePreciseAsFileTime ab. Für sehr viele Anwendungen reicht das tatsächlich,
denn dort wird die Wanduhr gelesen.
Auf der übrigen Fläche versteckt sich datumsabhängiger Code gern:
- die Zeitzone - die zwei Funktionen, die sie melden, plus die sechs, die zwischen Zonen umrechnen, wodurch ein Bericht am falschen Tag landet
- die Achse der verstrichenen Zeit - Tick-Zähler und ungeglättete Interruptzeit, was ein Testversions-Countdown meist misst
- Pausen, damit eine Verzögerung eine Verzögerung auf der Sitzungsuhr ist und nicht auf der echten, und Wartevorgänge auf Objekte, die gezählt werden und ihre echte Länge behalten
- Timer - wartbare, Fenster-, Thread-Pool- und Multimedia-Timer
- Prozesserzeugung, damit die Kindprozesse eines Installers in derselben Sitzung laufen statt im heutigen Tag
- Netzwerkverbindungen, gezählt als Hinweis, dass die Zeit von einem Server kommen kann
Von den 44 kommen 30 auf die Sitzungsuhr. Der Rest (14) wird nur gezählt und bleibt echt, sodass der Bericht ihn nennt, ohne zu behaupten, er sei verschoben worden. Wanduhr und Zeitzone werden in jeder Sitzung verschoben. Die Achse der verstrichenen Zeit und die Wartevorgänge werden beobachtet, wenn Sie das mit --scale-duration verlangen, der hochauflösende Zähler mit --scale-qpc.
Wann RunAsDate die bessere Wahl ist
Wirklich, und nicht selten:
- Sie brauchen ein Datum, in normaler Geschwindigkeit, jetzt gleich. RunAsDate ist ein Download unter 60 KB, hat kein Fenster, das man lernen müsste, und tut genau das seit vielen Jahren.
- Sie sind auf einem älteren Windows. RunAsDate reicht bis Windows 2000 zurück. Dieses Werkzeug zielt auf Windows 10 und 11 und ist auf nichts Älterem getestet.
- Die Größe zählt. Ein Download von 47 KB gegen ~2,4 MB für die Kommandozeile oder ~70 MB mit Fenster ist kein knapper Vergleich.
- Sie wollen kein Urteil. Die Abdeckung zu messen heißt, das Ergebnis zu lesen. Ist der Test ohnehin ein Wegwerftest, ist das ein Aufwand, den Sie nicht bestellt haben.
- Die Anwendung läuft schon. RunAsDate kann sich seit Version 1.40 an einen laufenden Prozess anhängen. Chrono Mock startet die Anwendung selbst, eine, die sich nicht neu starten lässt, ist also außer Reichweite.
- Sie wollen mehrere Anwendungen mit verschiedenen Daten gleichzeitig. RunAsDate gibt jeder ihr eigenes Datum. Chrono Mock führt eine Sitzung zur Zeit.
Beide können auch nebeneinander bestehen. Nichts hier hindert Sie daran, RunAsDate für den schnellen Fall zu behalten.
Wofür keines von beiden gedacht ist
Beide Werkzeuge tauchen in Suchen nach dem Verlängern von Testzeiträumen auf. Dieses ist nicht dafür gebaut, und kein Beispiel, kein Szenario und keine Seite hier wird das je vorführen. Chrono Mock dient dem Testen von Software, für die Sie verantwortlich sind - Ihr eigener Lizenzablauf, Ihre eigene Verlängerungslogik, Ihr eigener Monatsabschluss.
Es ist außerdem der Fall, der am wenigsten wahrscheinlich funktioniert. Lizenzschutz liest die Zeit regelmäßig über Wege, die gezielt schwer abzufangen sind - die gemeinsame Datenseite im Benutzermodus, direkte Systemaufrufe, einen Server -, und eine rückwärts laufende Uhr ist ein Zustand, den solcher Code erkennen soll. Die Prüfung wird Ihnen sagen, dass es nicht funktioniert hat, was die ehrliche Antwort ist und keine nützliche.