Chrono Mock
LimbaRomână

O alternativă la RunAsDate, cu părțile care lipseau

RunAsDate este de ani de zile răspunsul la „rulează acest program la o altă dată pe Windows” și este unul bun. Această pagină vorbește despre unde diferă cele două și despre unde RunAsDate rămâne alegerea mai bună.

Față în față

 RunAsDateChrono Mock
Rulează o aplicație la o dată falsădada
Lasă ceasul sistemului în pacedada
Funcții de timp interceptate544 (30 decalate, 14 numărate)
Ceas mai rapid decât cel realnu este oferitorice multiplicator întreg
Oprirea ceasuluida, implicitda
Salt cât timp aplicația ruleazădoar întoarcerea la data reală, după un număr fix de secundeînainte și înapoi, în orice moment
Fus orar doar pentru acel procesnedocumentatda, decalaj fix
Procesele copil moștenesc sesiuneanedocumentatda
Atașarea la o aplicație care rulează dejada, din versiunea 1.40nu - pornește singur aplicația
Mai multe aplicații cu date diferite în același timpdanu - o singură sesiune odată
Îți spune dacă a funcționatnuverdict, pe canale, cu numărul de apeluri
Aplicații Electron și Chromiumnedocumentatmecanism separat
Linie de comandă pentru CIdada, cu coduri de ieșire și JSON
Cod sursăfreeware, închisGPL-3.0
Dimensiune47 KB de descărcat, 57 KB pe 64 de biți~2,4 MB linia de comandă, ~70 MB cu fereastra
Versiuni vechi de Windowspână la Windows 2000Windows 10 și 11

„Nedocumentat” înseamnă că funcția nu este menționată pe pagina RunAsDate. Nu este o afirmație că instrumentul nu o are. Ceasul RunAsDate stă pe loc dacă nu este activată opțiunea Move the time forward according to the real time.

Diferența care contează cel mai mult

Nu este numărul de canale. Este faptul că RunAsDate îți spune sincer, în propria documentație, că „nu va afecta aplicațiile care iau data/ora curentă dintr-o altă sursă” - și apoi te lasă să afli singur dacă a ta este una dintre ele.

Chrono Mock tratează aceeași propoziție ca pe ceva de măsurat. Fiecare sesiune se încheie cu un verdict, canalele pe care aplicația le-a citit efectiv, cu un număr pentru fiecare, canalele ratate și un avertisment când aplicația a fost văzută deschizând o conexiune de rețea înainte să întrebe vreodată ceasul.

O aplicație care pare mutată în timp, dar nu este, e mai rea decât una care nu a pornit niciodată - produce un test trecut care nu înseamnă nimic. Cum funcționează auditul →

Cinci funcții sau 44 canale

RunAsDate interceptează GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime și GetSystemTimePreciseAsFileTime. Pentru foarte multe aplicații asta este cu adevărat suficient, pentru că acolo se citește ceasul de perete.

Restul suprafeței este locul unde tinde să se ascundă codul care depinde de dată:

  • fusul orar - cele două funcții care îl raportează, plus cele șase care convertesc între fusuri, prin care un raport ajunge în ziua greșită
  • axa timpului scurs - contoarele de tick-uri și timpul de întrerupere nepolarizat, ceea ce măsoară de obicei o numărătoare inversă de probă
  • pauzele, ca o întârziere să fie o întârziere pe ceasul sesiunii și nu pe cel real, și așteptările pe obiecte, care sunt numărate și își păstrează durata reală
  • temporizatoarele - waitable, de fereastră, de thread-pool și multimedia
  • crearea de procese, ca procesele copil ale unui instalator să ruleze în aceeași sesiune, nu în ziua de azi
  • conexiunile de rețea, numărate ca semn că ora poate veni de la un server

Din cele 44, 30 trec pe ceasul sesiunii. Celelalte 14 sunt doar numărate și rămân reale, așa că raportul le numește fără să pretindă că au fost decalate. Ceasul de perete și fusul orar sunt decalate în fiecare sesiune. Axa timpului scurs și așteptările sunt urmărite când ceri asta cu --scale-duration, iar contorul de înaltă rezoluție cu --scale-qpc.

Când RunAsDate este alegerea mai bună

Cu adevărat, și nu rar:

  • Ai nevoie de o singură dată, la viteză normală, chiar acum. RunAsDate este o descărcare sub 60 KB, nu are o fereastră de învățat și face exact asta de mulți ani.
  • Ești pe un Windows mai vechi. RunAsDate merge până la Windows 2000. Acest instrument vizează Windows 10 și 11 și nu este testat pe nimic mai vechi.
  • Dimensiunea contează. 47 KB de descărcat față de ~2,4 MB pentru linia de comandă, sau ~70 MB cu fereastra, nu este o comparație strânsă.
  • Nu vrei un verdict. Măsurarea acoperirii înseamnă citirea rezultatului. Dacă testul este de unică folosință, este un efort pe care nu l-ai cerut.
  • Aplicația rulează deja. RunAsDate se poate atașa la un proces în execuție din versiunea 1.40. Chrono Mock pornește singur aplicația, așa că una care nu poate fi repornită îi rămâne inaccesibilă.
  • Vrei mai multe aplicații cu date diferite în același timp. RunAsDate îi dă fiecăreia propria dată. Chrono Mock rulează o singură sesiune odată.

Cele două coexistă. Nimic de aici nu te oprește să păstrezi RunAsDate pentru cazul rapid.

Pentru ce nu este niciunul dintre ele

Ambele instrumente apar în căutări despre prelungirea perioadelor de probă. Acesta nu este construit pentru asta, iar niciun exemplu, preset sau pagină de aici nu va demonstra vreodată așa ceva. Chrono Mock este pentru testarea software-ului pentru care răspunzi tu - expirarea propriei licențe, propria logică de reînnoire, propriul raport de final de lună.

Este și cazul cel mai puțin probabil să funcționeze. Protecția prin licență citește de rutină ora pe căi alese ca să fie greu de interceptat - pagina de date partajată din user-mode, apeluri sistem directe, un server - iar un ceas care merge înapoi este o condiție pe care un asemenea cod este scris să o detecteze. Auditul îți va spune că nu a funcționat, ceea ce este răspunsul onest, nu unul folositor.

Încearcă-l