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
| RunAsDate | Chrono Mock | |
|---|---|---|
| Bir uygulamayı sahte bir tarihte çalıştırır | evet | evet |
| Sistem saatine dokunmaz | evet | evet |
| Yakalanan zaman işlevleri | 5 | 44 (30 kaydırılan, 14 sayılan) |
| Gerçek zamandan hızlı saat | sunulmuyor | herhangi bir tam sayı çarpan |
| Saati dondurma | evet, varsayılan olarak | evet |
| Uygulama çalışırken atlama | yalnızca belirlenen saniye sonra gerçek tarihe dönüş | ileri ve geri, herhangi bir ana |
| Yalnızca o süreç için saat dilimi | belgelenmemiş | evet, sabit kayma |
| Alt süreçler oturumu devralır | belgelenmemiş | evet |
| Zaten çalışan bir uygulamaya bağlanma | evet, 1.40 sürümünden beri | hayır - uygulamayı kendisi başlatır |
| Farklı tarihlerde birkaç uygulama aynı anda | evet | hayır - aynı anda tek oturum |
| İşe yarayıp yaramadığını söyler | hayır | karar, kanal kanal, çağrı sayılarıyla |
| Electron ve Chromium uygulamaları | belgelenmemiş | ayrı mekanizma |
| CI için komut satırı | evet | evet, çıkış kodları ve JSON ile |
| Kaynak kodu | freeware, kapalı | GPL-3.0 |
| Boyut | 47 KB indirme, 64 bit için 57 KB | komut satırı ~2,4 MB, pencereyle ~70 MB |
| Eski Windows sürümleri | Windows 2000’e kadar | Windows 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.