Chrono Mock

Alternatywa dla RunAsDate, z tym, czego brakowało

RunAsDate od lat jest odpowiedzią na „uruchom ten program z inną datą na Windows" i jest to dobra odpowiedź. Ta strona jest o tym, czym te dwa narzędzia się różnią - i w czym RunAsDate nadal wygrywa.

Obok siebie

 RunAsDateChrono Mock
Uruchamia aplikację z fałszywą datątaktak
Nie rusza zegara systemowegotaktak
Przechwycone funkcje czasu541 kanałów
Zegar szybszy niż rzeczywistynieoferowanedowolny całkowity mnożnik
Zamrożenie zegaranieoferowanetak
Skok w trakcie działania aplikacjinieoferowanew przód i w tył
Strefa czasowa tylko dla tego procesunieudokumentowanetak, stały offset
Procesy potomne dziedziczą sesjęnieudokumentowanetak
Mówi, czy zadziałałoniewerdykt, per kanał, z liczbą wywołań
Aplikacje Electron i Chromiumnieoferowaneosobny mechanizm
Wiersz poleceń do CItaktak, z kodami wyjścia i JSON-em
Kod źródłowyfreeware, zamkniętyGPL-3.0
Rozmiarponiżej 40 KB1,6 MB CLI, 69 MB z oknem
Stare wersje Windowswstecz do Windows 2000Windows 10 i 11

„Nieudokumentowane" znaczy, że funkcja nie jest wspomniana na stronie RunAsDate. To nie jest twierdzenie, że narzędzie jej nie ma.

Różnica, która waży najwięcej

To nie jest liczba kanałów. To fakt, że RunAsDate uczciwie pisze we własnej dokumentacji, że „nie wpłynie na aplikacje, które biorą bieżącą datę i godzinę z innego źródła" - i zostawia cię z ustaleniem, czy twoja jest jedną z nich.

Chrono Mock traktuje to samo zdanie jako coś do zmierzenia. Każda sesja kończy się werdyktem, listą kanałów, które aplikacja naprawdę czytała, z liczbą wywołań każdego, listą kanałów pominiętych oraz ostrzeżeniem, gdy aplikacja otwierała połączenie sieciowe, zanim w ogóle zapytała o zegar.

Aplikacja, która wygląda na przesuniętą w czasie, a nie jest, jest gorsza niż taka, która w ogóle nie wystartowała - produkuje zdany test, który nic nie znaczy. Jak działa audyt →

Pięć funkcji albo 41 kanałów

RunAsDate przechwytuje GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime oraz GetSystemTimePreciseAsFileTime. Dla bardzo wielu aplikacji to naprawdę wystarcza, bo właśnie tam czytany jest zegar ścienny.

Reszta powierzchni to miejsca, w których kod zależny od daty lubi się chować:

  • strefa czasowa - cztery funkcje plus cała rodzina konwersji między strefami, przez którą raport ląduje w złym dniu
  • oś czasu trwania - liczniki taktów i nieobciążony czas przerwań, czyli to, co zwykle mierzy odliczanie wersji próbnej
  • uśpienia i czekania, żeby opóźnienie było opóźnieniem na zegarze sesji, a nie na prawdziwym
  • timery - nastawialne, okienkowe, z puli wątków i multimedialne
  • tworzenie procesów, żeby dzieci instalatora działały w tej samej sesji, a nie w dniu dzisiejszym

Kiedy RunAsDate jest lepszym wyborem

Naprawdę i wcale nie rzadko:

  • Potrzebujesz jednej daty, w normalnym tempie, teraz. RunAsDate waży poniżej 40 KB, nie ma okna do nauczenia się i robi dokładnie to od wielu lat.
  • Jesteś na starszym Windowsie. RunAsDate sięga wstecz do Windows 2000. To narzędzie celuje w Windows 10 i 11 i nie jest testowane nigdzie starzej.
  • Rozmiar ma znaczenie. 40 KB wobec 1,6 MB dla wiersza poleceń albo 69 MB z oknem to nie jest bliskie porównanie.
  • Nie chcesz werdyktu. Mierzenie pokrycia oznacza czytanie wyniku. Jeśli test jest jednorazowy, to narzut, o który nie prosiłeś.

Te dwa narzędzia zresztą współistnieją. Nic tu nie każe ci porzucać RunAsDate do szybkich przypadków.

Do czego żadne z nich nie służy

Oba narzędzia pojawiają się w wyszukiwaniach o przedłużaniu wersji próbnych. To nie jest do tego zbudowane i żaden przykład, preset ani strona tutaj nigdy tego nie pokaże. Chrono Mock służy do testowania oprogramowania, za które odpowiadasz - własnego wygasania licencji, własnej logiki odnowień, własnego raportu na koniec miesiąca.

Jest to zresztą przypadek, w którym najmniej prawdopodobne jest, że zadziała. Ochrona licencji rutynowo czyta czas drogami dobranymi tak, żeby trudno je było przechwycić - współdzielona strona danych trybu użytkownika, bezpośrednie wywołania systemowe, serwer - a cofający się zegar to warunek, pod który taki kod jest wprost pisany. Audyt powie ci, że nie zadziałało, co jest odpowiedzią uczciwą, a nie użyteczną.

Wypróbuj