Draai een Windows-app op elke datum - zonder de systeemklok aan te raken
Zet de klok van één applicatie op volgend jaar, bevries hem, of versnel hem zodat een proefperiode van 30 dagen verloopt terwijl je koffie zet. De rest van de machine houdt de echte tijd: je domeinaanmelding, je certificaten en alle andere programma's gaan gewoon door.
Daarna vertelt het je of de vervanging echt gewerkt heeft.
Gratis en open source, GPL-3.0 Draagbaar of geïnstalleerd Geen beheerdersrechten om te draaien Maakt nooit verbinding met internet
Zo ziet een sessie eruit
23:59:50
18:12:33
Waarom dit bestaat
Alles testen wat van de datum afhangt betekent de tijd verplaatsen. Beide gebruikelijke opties zijn slecht.
Verlopende licenties, proefperiodes, abonnementsverlengingen, geldigheid van certificaten, levensduur van tokens, maand- en jaarafsluitingen, renteberekening, herinneringen.
Optie 1 - de systeemklok veranderen
Het breekt domeinaanmelding en Kerberos, maakt TLS-certificaten ongeldig zodat de browser niet meer werkt, brengt Windows Update in de war en laat elke andere applicatie op de machine verkeerde tijdstempels schrijven. Op een machine in een domein blokkeert het groepsbeleid de wijziging meestal of draait die na enkele minuten terug, dus de test is niet eens herhaalbaar.
Optie 2 - wachten
Wat betekent: niet testen. De datumafhankelijke gevallen worden overgeslagen, en “de licentie verloopt nooit” gaat naar de klant.
Wat het doet
Eén proces beweegt door de tijd. De rest van de machine niet.
Elk moment
Een specifieke datum en tijd, of een relatieve - +30 days, -1 year.
Lopend, bevroren of versneld
Normale snelheid, een stilgezette klok of een geheel getal als vermenigvuldiger.
x1440 maakt van een dag een minuut.
Een eigen tijdzone
Een vaste offset alleen voor dat proces, terwijl de systeemzone precies blijft waar hij was.
Kindprocessen gaan mee
Installatieprogramma's en launchers starten kindprocessen. Zonder dat dekt de test maar de helft van wat er draaide.
Springen tijdens de sessie
Vooruit of achteruit - ook de sprong terug die een laptop maakt na synchronisatie met een tijdserver.
Ook Electron en Chromium
Via een ander mechanisme, omdat hun klok in een afgeschermde renderer leeft waar injectie niet bij komt.
Wat niemand anders doet
Hoe weet je dat het gewerkt heeft?
Bij elk ander gereedschap weet je het niet. De applicatie start, toont een datum, en jij gaat ervan uit dat het klopt. Maar ze kan de klok lezen via een kanaal dat het gereedschap nooit heeft onderschept - van een server, uit een database, via een runtimelaag - en dan betekent “de test is geslaagd” helemaal niets.
- →Een oordeel voordat de echte test begint: werkt / werkt gedeeltelijk / werkt niet
- →Welke van de 44 tijdkanalen gedekt waren en hoe vaak de applicatie elk ervan heeft opgevraagd
- →Welke kanalen niet gedekt waren - duidelijk benoemd, nooit weggelaten
- →Waarschuwingen met de gevolgen erbij: “deze applicatie leest de tijd van het netwerk - lokale vervanging is mogelijk niet genoeg”
Twee minuten ermee
Een venster om te verkennen, een opdrachtregel voor CI. Dezelfde engine achter beide.
# Een applicatie draaien alsof het de laatste seconde van 2027 is chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:59 # Een proefperiode van 30 dagen zien verlopen terwijl je koffie zet: x1440 is een dag per minuut chrono run "C:\apps\test.exe" --mode x1440 # Een benoemd scenario gebruiken in plaats van een datum en het bewijs in een bestand schrijven chrono run "C:\apps\test.exe" --preset year-rollover --report session.txt
De calculator beantwoordt de andere helft van datumtesten - welke datum je moet gebruiken:
$ 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)
Vergeleken met wat je waarschijnlijk gebruikt
Zoals RunAsDate, met de onderdelen die ontbraken
RunAsDate onderschept vijf wandklokfuncties en doet dat goed. Hier zie je waar de twee verschillen - en de volledige pagina zegt ook waar RunAsDate nog steeds de betere keuze is.
| RunAsDate | Chrono Mock | |
|---|---|---|
| Draait een app op een valse datum | ja | ja |
| Onderschepte tijdkanalen | 5 | 44 (30 verschoven, 14 geteld) |
| De klok versnellen | nee | ja |
| Onafhankelijke tijdzone | niet gedocumenteerd | ja |
| Volgt kindprocessen | niet gedocumenteerd | ja |
| Zegt of het gewerkt heeft | nee | ja, per kanaal |
| Broncode beschikbaar | freeware, gesloten | GPL-3.0 |
Haal het binnen
Pak ergens uit en start het, of installeer de ondertekende .msi voor elk account
op de machine. Draaien vraagt geen beheerdersrechten en de zip-bestanden schrijven niets naar
het register.