Alternatif RunAsDate, dengan bagian yang tadinya tidak ada
RunAsDate sudah bertahun-tahun menjadi jawaban untuk “jalankan program ini pada tanggal yang berbeda di Windows”, dan ia jawaban yang bagus. Halaman ini membahas di mana keduanya berbeda, dan di mana RunAsDate tetap menjadi pilihan yang lebih baik.
Berdampingan
| RunAsDate | Chrono Mock | |
|---|---|---|
| Menjalankan satu aplikasi pada tanggal palsu | ya | ya |
| Tidak menyentuh jam sistem | ya | ya |
| Fungsi waktu yang dicegat | 5 | 44 (30 digeser, 14 dihitung) |
| Jam lebih cepat dari waktu nyata | tidak ditawarkan | pengali bilangan bulat apa pun |
| Membekukan jam | ya, secara bawaan | ya |
| Melompat saat aplikasi berjalan | hanya kembali ke tanggal sebenarnya, setelah jumlah detik yang ditentukan | maju dan mundur, ke momen mana pun |
| Zona waktu hanya untuk proses itu | tidak terdokumentasi | ya, selisih tetap |
| Proses anak mewarisi sesi | tidak terdokumentasi | ya |
| Menempel ke aplikasi yang sudah berjalan | ya, sejak versi 1.40 | tidak - ia menjalankan aplikasinya sendiri |
| Beberapa aplikasi dengan tanggal berbeda sekaligus | ya | tidak - satu sesi dalam satu waktu |
| Memberi tahu apakah berhasil | tidak | putusan, per kanal, dengan jumlah panggilan |
| Aplikasi Electron dan Chromium | tidak terdokumentasi | mekanisme terpisah |
| Baris perintah untuk CI | ya | ya, dengan kode keluar dan JSON |
| Kode sumber | freeware, tertutup | GPL-3.0 |
| Ukuran | unduhan 47 KB, 57 KB untuk 64-bit | ~2,4 MB baris perintah, ~70 MB dengan jendela |
| Versi Windows lama | sampai Windows 2000 | Windows 10 dan 11 |
“Tidak terdokumentasi” berarti fitur itu tidak disebutkan di halaman RunAsDate. Itu bukan klaim bahwa alatnya tidak memilikinya. Jam RunAsDate diam kecuali opsinya Move the time forward according to the real time diaktifkan.
Perbedaan yang paling penting
Bukan jumlah kanalnya. Melainkan bahwa RunAsDate, dalam dokumentasinya sendiri, dengan jujur menyatakan bahwa ia “tidak akan memengaruhi aplikasi yang mengambil tanggal/waktu saat ini dari sumber lain” - lalu membiarkan Anda mencari tahu sendiri apakah aplikasi Anda salah satunya.
Chrono Mock memperlakukan kalimat yang sama itu sebagai sesuatu yang diukur. Setiap sesi berakhir dengan putusan, kanal yang benar-benar dibaca aplikasi beserta hitungan untuk masing-masing, kanal yang terlewat, dan peringatan ketika aplikasi terlihat membuka koneksi jaringan sebelum sempat menanyakan jam.
Aplikasi yang tampak bergeser waktunya padahal tidak lebih buruk daripada yang tidak pernah diluncurkan - ia menghasilkan pengujian lulus yang tidak berarti apa-apa. Cara kerja audit →
Lima fungsi, atau 44 kanal
RunAsDate mencegat GetSystemTime, GetLocalTime,
GetSystemTimeAsFileTime, NtQuerySystemTime, dan
GetSystemTimePreciseAsFileTime. Untuk sangat banyak aplikasi itu benar-benar cukup,
karena di sanalah jam dinding dibaca.
Sisa permukaannya adalah tempat kode yang bergantung pada tanggal cenderung bersembunyi:
- zona waktu - dua fungsi yang melaporkannya, ditambah enam fungsi yang mengonversi antarzona, yang membuat laporan jatuh di hari yang salah
- sumbu waktu berlalu - hitungan tick dan interrupt time tanpa bias, yang biasanya diukur oleh hitung mundur masa percobaan
- jeda tidur, agar penundaan menjadi penundaan pada jam sesi dan bukan pada jam sebenarnya, serta penantian objek, yang dihitung dan tetap pada durasi sebenarnya
- timer - waitable, jendela, thread-pool, dan multimedia
- pembuatan proses, sehingga proses anak installer berjalan di sesi yang sama, bukan di hari ini
- koneksi jaringan, dihitung sebagai tanda bahwa waktu mungkin berasal dari server
Dari 44 kanal, 30 dipindahkan ke jam sesi. Sisanya (14) hanya dihitung dan tetap nyata, sehingga laporan mencantumkannya tanpa mengklaim bahwa kanal itu digeser. Jam dinding dan zona waktu digeser di setiap sesi. Sumbu waktu berlalu dan penantian dipantau saat Anda memintanya dengan --scale-duration, dan penghitung resolusi tinggi dengan --scale-qpc.
Kapan RunAsDate adalah pilihan yang lebih baik
Sungguh-sungguh, dan tidak jarang:
- Anda hanya perlu satu tanggal, pada kecepatan normal, sekarang juga. RunAsDate adalah unduhan di bawah 60 KB, tidak punya jendela yang perlu dipelajari, dan sudah melakukan persis ini selama bertahun-tahun.
- Anda memakai Windows yang lebih lama. RunAsDate menjangkau sampai Windows 2000. Alat ini menargetkan Windows 10 dan 11 dan tidak diuji di versi yang lebih lama.
- Ukuran itu penting. Unduhan 47 KB dibanding ~2,4 MB untuk baris perintah, atau ~70 MB dengan jendela, bukan perbandingan yang ketat.
- Anda tidak menginginkan putusan. Mengukur cakupan berarti membaca hasilnya. Jika pengujiannya sekali pakai, itu beban yang tidak Anda minta.
- Aplikasinya sudah berjalan. Sejak versi 1.40 RunAsDate bisa menempel ke proses yang sedang berjalan. Chrono Mock menjalankan aplikasinya sendiri, jadi aplikasi yang tidak bisa dijalankan ulang berada di luar jangkauannya.
- Anda ingin beberapa aplikasi dengan tanggal berbeda sekaligus. RunAsDate memberi masing-masing tanggalnya sendiri. Chrono Mock menjalankan satu sesi dalam satu waktu.
Keduanya juga dapat hidup berdampingan. Tidak ada yang menghalangi Anda mempertahankan RunAsDate untuk kasus cepat.
Untuk apa keduanya tidak dibuat
Kedua alat muncul dalam pencarian tentang memperpanjang masa percobaan. Alat ini tidak dibuat untuk itu, dan tidak ada contoh, skenario, atau halaman di sini yang akan pernah mendemonstrasikannya. Chrono Mock untuk menguji perangkat lunak yang menjadi tanggung jawab Anda - masa berlaku lisensi Anda sendiri, logika perpanjangan Anda sendiri, laporan akhir bulan Anda sendiri.
Itu juga kasus yang paling kecil kemungkinannya berhasil. Perlindungan lisensi rutin membaca waktu lewat jalur yang dipilih agar sulit dicegat - halaman data bersama mode pengguna, system call langsung, sebuah server - dan jam yang bergerak mundur adalah kondisi yang ditulis untuk dideteksi kode semacam itu. Audit akan memberi tahu bahwa ia tidak berhasil, yang merupakan jawaban jujur, bukan jawaban yang berguna.