Chrono Mock
DilTürkçe

Eksik olan kısımlarıyla bir RunAsDate alternatifi

RunAsDate, yıllardır “Windows’ta bu programı farklı bir tarihte çalıştır” sorusunun cevabı oldu ve iyi bir cevap. Bu sayfa ikisinin nerede ayrıldığı ve RunAsDate’in hâlâ daha iyi seçim olduğu yerler hakkında.

Yan yana

 RunAsDateChrono Mock
Bir uygulamayı sahte bir tarihte çalıştırırevetevet
Sistem saatine dokunmazevetevet
Yakalanan zaman işlevleri544 (30 kaydırılan, 14 sayılan)
Gerçek zamandan hızlı saatsunulmuyorherhangi bir tam sayı çarpan
Saati dondurmaevet, varsayılan olarakevet
Uygulama çalışırken atlamayalnızca belirlenen saniye sonra gerçek tarihe dönüşileri ve geri, herhangi bir ana
Yalnızca o süreç için saat dilimibelgelenmemişevet, sabit kayma
Alt süreçler oturumu devralırbelgelenmemişevet
Zaten çalışan bir uygulamaya bağlanmaevet, 1.40 sürümünden berihayır - uygulamayı kendisi başlatır
Farklı tarihlerde birkaç uygulama aynı andaevethayır - aynı anda tek oturum
İşe yarayıp yaramadığını söylerhayırkarar, kanal kanal, çağrı sayılarıyla
Electron ve Chromium uygulamalarıbelgelenmemişayrı mekanizma
CI için komut satırıevetevet, çıkış kodları ve JSON ile
Kaynak kodufreeware, kapalıGPL-3.0
Boyut47 KB indirme, 64 bit için 57 KBkomut satırı ~2,4 MB, pencereyle ~70 MB
Eski Windows sürümleriWindows 2000’e kadarWindows 10 ve 11

“Belgelenmemiş”, özelliğin RunAsDate sayfasında anılmadığı anlamına gelir. Aracın buna sahip olmadığı iddiası değildir. RunAsDate’in saati, Move the time forward according to the real time seçeneği açılmadıkça durur.

En çok önem taşıyan fark

Kanal sayısı değil. RunAsDate’in kendi belgelerinde size dürüstçe, “geçerli tarih/saati başka bir kaynaktan alan uygulamaları etkilemeyeceğini” söylemesi - ve sonra sizinkinin bunlardan biri olup olmadığını kendiniz bulmanıza bırakması.

Chrono Mock aynı cümleyi ölçülecek bir şey olarak ele alır. Her oturum bir kararla, uygulamanın gerçekten okuduğu kanalların her biri için bir sayıyla, kaçırılan kanallarla ve uygulamanın saati hiç sormadan önce bir ağ bağlantısı açarken görüldüğünde bir uyarıyla biter.

Zamanı kaymış gibi görünen ama kaymamış bir uygulama, hiç başlamamış olandan daha kötüdür - hiçbir şey ifade etmeyen, geçen bir test üretir. Denetim nasıl çalışır →

Beş işlev ya da 44 kanal

RunAsDate GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime ve GetSystemTimePreciseAsFileTime’ı yakalar. Çok sayıda uygulama için bu gerçekten yeterlidir, çünkü duvar saati orada okunur.

Yüzeyin geri kalanı, tarihe bağlı kodun saklanma eğiliminde olduğu yerdir:

  • saat dilimi - onu bildiren iki işlev ve dilimler arasında dönüştüren altı işlev, bir raporun yanlış güne düşmesi buradan olur
  • geçen zaman ekseni - tick sayıları ve yanlılıksız kesinti zamanı; bir deneme geri sayımının genellikle ölçtüğü şey
  • uyumalar, böylece bir gecikme gerçek saatte değil oturum saatinde bir gecikme olur, ve nesne beklemeleri, sayılan ve gerçek sürelerini koruyan
  • zamanlayıcılar - waitable, pencere, thread-pool ve çok ortamlı
  • süreç oluşturma; böylece bir yükleyicinin alt süreçleri bugünde değil aynı oturumda çalışır
  • ağ bağlantıları, zamanın bir sunucudan gelebileceğinin işareti olarak sayılır

44 kanalın 30 tanesi oturum saatine geçer. Kalan 14 tanesi yalnızca sayılır ve gerçek kalır, bu yüzden rapor onları kaydırılmış gibi göstermeden listeler. Duvar saati ve saat dilimi her oturumda kaydırılır. Geçen süre ekseni ve beklemeler --scale-duration ile, yüksek çözünürlüklü sayaç ise --scale-qpc ile istediğinizde izlenir.

RunAsDate’in daha iyi seçim olduğu durumlar

Gerçekten, ve nadiren değil:

  • Normal hızda, hemen şimdi tek bir tarihe ihtiyacınız var. RunAsDate 60 KB’ın altında bir indirmedir, öğrenilecek bir penceresi yoktur ve tam olarak bunu uzun yıllardır yapıyor.
  • Eski bir Windows’tasınız. RunAsDate Windows 2000’e kadar gider. Bu araç Windows 10 ve 11’i hedefler ve daha eskisinde test edilmemiştir.
  • Boyut önemlidir. 47 KB’lık bir indirmeye karşı komut satırı için ~2,4 MB ya da pencereyle ~70 MB yakın bir karşılaştırma değildir.
  • Karar istemiyorsunuz. Kapsamayı ölçmek sonucu okumak demektir. Test tek kullanımlıksa, bu istemediğiniz bir yüktür.
  • Uygulama zaten çalışıyor. RunAsDate 1.40 sürümünden beri çalışan bir işleme bağlanabilir. Chrono Mock uygulamayı kendisi başlatır, bu yüzden yeniden başlatılamayan bir uygulama onun erişiminin dışındadır.
  • Farklı tarihlerde birkaç uygulamayı aynı anda istiyorsunuz. RunAsDate her birine kendi tarihini verir. Chrono Mock aynı anda tek bir oturum yürütür.

İkisi bir arada da var olabilir. Burada hiçbir şey hızlı durum için RunAsDate’i tutmanızı engellemez.

İkisinin de amacı olmayan şey

Her iki araç da deneme sürelerini uzatmakla ilgili aramalarda çıkar. Bu araç bunun için yapılmadı ve buradaki hiçbir örnek, senaryo ya da sayfa bunu asla göstermeyecek. Chrono Mock, sorumlu olduğunuz yazılımı test etmek içindir - kendi lisans süresi dolumunuz, kendi yenileme mantığınız, kendi ay sonu raporunuz.

Bu aynı zamanda çalışma ihtimalinin en düşük olduğu durumdur. Lisans koruması rutin olarak zamanı yakalaması zor olacak şekilde seçilmiş yollardan okur - paylaşılan kullanıcı modu veri sayfası, doğrudan sistem çağrıları, bir sunucu - ve geriye giden bir saat, bu tür kodun tespit etmek üzere yazıldığı bir durumdur. Denetim size çalışmadığını söyleyecektir; bu dürüst cevaptır, yararlı olan değil.

Deneyin