Alternativa k RunAsDate, s tím, co chybělo
RunAsDate je už léta odpovědí na „spusť tento program v jiném datu na Windows“ a je to dobrá odpověď. Tato stránka je o tom, v čem se oba liší a kdy je RunAsDate stále lepší volba.
Vedle sebe
| RunAsDate | Chrono Mock | |
|---|---|---|
| Spustí aplikaci s falešným datem | ano | ano |
| Nechá systémové hodiny na pokoji | ano | ano |
| Zachycené časové funkce | 5 | 44 (30 posunutých, 14 počítaných) |
| Hodiny rychlejší než skutečný čas | nenabízí | libovolný celočíselný násobitel |
| Zastavení hodin | ano, ve výchozím stavu | ano |
| Skok, zatímco aplikace běží | jen návrat ke skutečnému datu, po pevném počtu sekund | dopředu i dozadu, na libovolný okamžik |
| Časové pásmo jen pro tento proces | nezdokumentováno | ano, pevný posun |
| Podřízené procesy dědí sezení | nezdokumentováno | ano |
| Připojení k už běžící aplikaci | ano, od verze 1.40 | ne - aplikaci spouští sám |
| Několik aplikací s různými daty najednou | ano | ne - jedno sezení najednou |
| Řekne vám, jestli to zabralo | ne | verdikt, po kanálech, s počtem volání |
| Aplikace Electron a Chromium | nezdokumentováno | samostatný mechanismus |
| Příkazový řádek pro CI | ano | ano, s návratovými kódy a JSON |
| Zdrojový kód | freeware, uzavřený | GPL-3.0 |
| Velikost | 47 KB ke stažení, 57 KB pro 64 bitů | ~2,4 MB příkazová řádka, ~70 MB s oknem |
| Starší verze Windows | až po Windows 2000 | Windows 10 a 11 |
„Nezdokumentováno“ znamená, že funkce není na stránce RunAsDate zmíněna. Není to tvrzení, že ji nástroj nemá. Hodiny RunAsDate stojí, dokud není zapnutá jeho volba Move the time forward according to the real time.
Rozdíl, na kterém záleží nejvíc
Není to počet kanálů. Je to to, že RunAsDate vám ve vlastní dokumentaci upřímně říká, že „neovlivní aplikace, které berou aktuální datum a čas z jiného zdroje“ - a pak vás nechá, ať si zjistíte, jestli je ta vaše jednou z nich.
Chrono Mock tutéž větu bere jako něco, co se má změřit. Každé sezení končí verdiktem, kanály, které aplikace skutečně četla, s počtem u každého, kanály, které se minuly, a varováním, když byla aplikace spatřena při otevírání síťového spojení dřív, než se vůbec zeptala hodin.
Aplikace, která vypadá posunutá v čase, ale není, je horší než ta, která se nikdy nespustila - vyrábí prošlý test, který nic neznamená. Jak funguje audit →
Pět funkcí, nebo 44 kanálů
RunAsDate zachycuje GetSystemTime, GetLocalTime,
GetSystemTimeAsFileTime, NtQuerySystemTime a
GetSystemTimePreciseAsFileTime. Pro velkou řadu aplikací to opravdu stačí, protože
právě tam se čtou kalendářní hodiny.
Zbytek povrchu je tam, kde se kód závislý na datu rád skrývá:
- časové pásmo - dvě funkce, které ho hlásí, plus šest, které převádějí mezi pásmy, a tak report skončí ve špatném dni
- osa uplynulého času - počty ticků a nezkreslený čas přerušení, což je to, co obvykle měří odpočet zkušební doby
- uspání, aby zpoždění bylo zpožděním na hodinách sezení, a ne na skutečných, a čekání na objekty, která se počítají a zachovávají svou skutečnou délku
- časovače - waitable, okenní, thread-pool a multimediální
- vytváření procesů, aby podřízené procesy instalátoru běžely ve stejném sezení, ne v dnešním dni
- síťová připojení, počítaná jako znamení, že čas může přicházet ze serveru
Z 44 kanálů jich na hodiny sezení přechází 30. Zbytek (14) se jen počítá a zůstává skutečný, takže ho report uvádí, aniž by tvrdil, že byl posunut. Nástěnné hodiny a časové pásmo se posouvají v každém sezení. Osa uplynulého času a čekání se sledují, když o to požádáte přes --scale-duration, čítač s vysokým rozlišením přes --scale-qpc.
Kdy je lepší volba RunAsDate
Opravdu, a nezřídka:
- Potřebujete jedno datum, běžnou rychlostí, hned teď. RunAsDate se stahuje v balíčku pod 60 KB, nemá okno, které by se bylo třeba učit, a přesně tohle dělá už mnoho let.
- Jste na starších Windows. RunAsDate sahá až k Windows 2000. Tento nástroj cílí na Windows 10 a 11 a na starších není testován.
- Záleží na velikosti. 47 KB ke stažení proti ~2,4 MB pro příkazovou řádku nebo ~70 MB s oknem není těsné srovnání.
- Nechcete verdikt. Měření pokrytí znamená číst výsledek. Pokud je test na jedno použití, je to režie, o kterou jste nežádali.
- Aplikace už běží. RunAsDate se od verze 1.40 umí připojit k běžícímu procesu. Chrono Mock aplikaci spouští sám, takže ta, kterou nelze spustit znovu, je mimo jeho dosah.
- Chcete několik aplikací s různými daty najednou. RunAsDate dá každé vlastní datum. Chrono Mock vede jedno sezení najednou.
Oba také mohou koexistovat. Nic tu vám nebrání ponechat si RunAsDate pro rychlý případ.
K čemu není ani jeden z nich
Oba nástroje se objevují ve vyhledávání o prodlužování zkušebních dob. Tento k tomu není určen a žádný příklad, preset ani stránka tu to nikdy nebude předvádět. Chrono Mock slouží k testování softwaru, za který odpovídáte - vaše vlastní vypršení licence, vaše vlastní logika obnovení, vaše vlastní měsíční uzávěrka.
Je to také případ, který nejspíš nebude fungovat. Ochrana licence běžně čte čas cestami zvolenými tak, aby se těžko zachytávaly - sdílená datová stránka v uživatelském režimu, přímá systémová volání, server - a posun hodin zpět je podmínka, kterou je takový kód napsán detekovat. Audit vám řekne, že to nezabralo, což je upřímná odpověď, ne užitečná.