ทางเลือกแทน RunAsDate ที่เติมส่วนที่ขาดหายไป
RunAsDate เป็นคำตอบของ “รันโปรแกรมนี้ที่วันอื่นบน Windows” มาหลายปี และเป็นคำตอบที่ดี หน้านี้เล่าถึงจุดที่ทั้งสองต่างกัน และจุดที่ RunAsDate ยังเป็นตัวเลือกที่ดีกว่า
เทียบกันทีละข้อ
| RunAsDate | Chrono Mock | |
|---|---|---|
| รันแอปหนึ่งตัวที่วันที่ปลอม | ใช่ | ใช่ |
| ไม่แตะนาฬิกาของระบบ | ใช่ | ใช่ |
| ฟังก์ชันเวลาที่ดัก | 5 | 44 (เลื่อน 30 ช่อง นับอย่างเดียว 14 ช่อง) |
| นาฬิกาที่เร็วกว่าเวลาจริง | ไม่มี | ตัวคูณจำนวนเต็มใดก็ได้ |
| หยุดนาฬิกา | ใช่ เป็นค่าเริ่มต้น | ใช่ |
| กระโดดขณะแอปรันอยู่ | กลับสู่วันที่จริงได้อย่างเดียว หลังจากจำนวนวินาทีที่กำหนด | ไปข้างหน้าและย้อนกลับ ไปยังช่วงเวลาใดก็ได้ |
| เขตเวลาเฉพาะโพรเซสนั้น | ไม่มีเอกสาร | ใช่ ออฟเซ็ตคงที่ |
| โพรเซสย่อยสืบทอดเซสชัน | ไม่มีเอกสาร | ใช่ |
| เกาะเข้ากับแอปพลิเคชันที่กำลังทำงานอยู่ | ใช่ ตั้งแต่เวอร์ชัน 1.40 | ไม่ - เครื่องมือนี้เปิดแอปพลิเคชันเอง |
| หลายแอปพลิเคชันที่วันที่ต่างกันพร้อมกัน | ใช่ | ไม่ - ครั้งละหนึ่งเซสชัน |
| บอกว่าได้ผลหรือไม่ | ไม่ | ผลสรุป แยกตามช่องทาง พร้อมจำนวนครั้งที่เรียก |
| แอป Electron และ Chromium | ไม่มีเอกสาร | กลไกแยกต่างหาก |
| บรรทัดคำสั่งสำหรับ CI | ใช่ | ใช่ พร้อมรหัสออกและ JSON |
| ซอร์สโค้ด | ฟรีแวร์ ปิดซอร์ส | GPL-3.0 |
| ขนาด | ดาวน์โหลด 47 KB และ 57 KB สำหรับ 64 บิต | บรรทัดคำสั่งราว 2.4 MB พร้อมหน้าต่างราว 70 MB |
| Windows รุ่นเก่า | ย้อนไปถึง Windows 2000 | Windows 10 และ 11 |
“ไม่มีเอกสาร” หมายถึงฟีเจอร์นั้นไม่ได้ถูกกล่าวถึงในหน้าของ RunAsDate ไม่ได้อ้างว่าเครื่องมือนั้นไม่มีฟีเจอร์ดังกล่าว นาฬิกาของ RunAsDate จะหยุดนิ่งจนกว่าจะเปิดตัวเลือก Move the time forward according to the real time
ความต่างที่สำคัญที่สุด
ไม่ใช่จำนวนช่องทาง แต่คือที่ RunAsDate บอกอย่างซื่อสัตย์ในเอกสารของตัวเองว่ามัน“จะไม่มีผลกับแอปที่ดึงวันที่/เวลาปัจจุบันจากแหล่งอื่น” - แล้วปล่อยให้คุณหาเองว่าแอปของคุณเป็นหนึ่งในนั้นหรือไม่
Chrono Mock ถือประโยคเดียวกันนั้นเป็นสิ่งที่ต้องวัด ทุกเซสชันจบด้วยผลสรุป ช่องทางที่แอปอ่านจริงพร้อมจำนวนของแต่ละช่อง ช่องทางที่ตกหล่น และคำเตือนเมื่อเห็นแอปเปิดการเชื่อมต่อเครือข่ายก่อนที่มันจะถามนาฬิกาเสียอีก
แอปที่ดูเหมือนเวลาถูกเลื่อนแต่ไม่ได้ถูกเลื่อนแย่กว่าแอปที่ไม่เคยเปิดเลย - มันให้ผลการทดสอบที่ผ่านซึ่งไม่มีความหมาย การตรวจสอบทำงานอย่างไร →
ห้าฟังก์ชัน หรือ 44 ช่องทาง
RunAsDate ดักฟังก์ชัน GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime และ GetSystemTimePreciseAsFileTime สำหรับแอปจำนวนมากนั่นเพียงพอจริง ๆ เพราะนาฬิกาติดผนังถูกอ่านที่นั่น
พื้นผิวส่วนที่เหลือคือที่ที่โค้ดซึ่งขึ้นกับวันที่มักซ่อนอยู่:
- เขตเวลา - ฟังก์ชันสองตัวที่บอกเขตเวลา บวกอีกหกตัวที่แปลงระหว่างเขต ซึ่งทำให้รายงานไปตกผิดวัน
- แกนเวลาที่ผ่านไป - จำนวนติ๊กและเวลาขัดจังหวะแบบไม่เอนเอียง ซึ่งเป็นสิ่งที่การนับถอยหลังช่วงทดลองใช้มักวัด
- การหลับ (sleep) เพื่อให้การหน่วงเป็นการหน่วงตามนาฬิกาของเซสชัน ไม่ใช่นาฬิกาจริง และการรอออบเจกต์ ซึ่งถูกนับและคงความยาวจริงไว้
- ตัวจับเวลา - แบบรอได้ แบบหน้าต่าง แบบเธรดพูล และแบบมัลติมีเดีย
- การสร้างโพรเซส เพื่อให้โพรเซสย่อยของตัวติดตั้งรันในเซสชันเดียวกัน ไม่ใช่ในวันปัจจุบัน
- การเชื่อมต่อเครือข่าย ถูกนับเป็นสัญญาณว่าเวลาอาจมาจากเซิร์ฟเวอร์
จาก 44 ช่อง มี 30 ช่องที่ถูกย้ายไปใช้นาฬิกาของเซสชัน อีก 14 ช่องถูกนับอย่างเดียวและยังเป็นค่าจริง รายงานจึงแสดงรายการเหล่านี้โดยไม่อ้างว่าถูกเลื่อน นาฬิกาแขวนผนังและเขตเวลาถูกเลื่อนในทุกเซสชัน แกนเวลาที่ผ่านไปและการรอจะถูกเฝ้าดูเมื่อคุณขอด้วย --scale-duration และตัวนับความละเอียดสูงด้วย --scale-qpc
เมื่อ RunAsDate เป็นตัวเลือกที่ดีกว่า
จริง ๆ และไม่ใช่เรื่องหายาก:
- คุณต้องการวันที่เดียว ที่ความเร็วปกติ ตอนนี้เลย RunAsDate เป็นไฟล์ดาวน์โหลดเล็กกว่า 60 KB ไม่มีหน้าต่างให้ต้องเรียนรู้ และทำสิ่งนี้มาหลายปีแล้ว
- คุณใช้ Windows รุ่นเก่า RunAsDate ย้อนไปถึง Windows 2000 เครื่องมือนี้มุ่งที่ Windows 10 และ 11 และไม่ได้ทดสอบบนรุ่นที่เก่ากว่า
- ขนาดสำคัญ ไฟล์ดาวน์โหลด 47 KB เทียบกับราว 2.4 MB สำหรับบรรทัดคำสั่ง หรือราว 70 MB พร้อมหน้าต่าง ไม่ใช่การเปรียบเทียบที่สูสี
- คุณไม่ต้องการผลสรุป การวัดความครอบคลุมหมายถึงต้องอ่านผลลัพธ์ ถ้าการทดสอบเป็นแบบใช้แล้วทิ้ง นั่นคือภาระที่คุณไม่ได้ขอ
- แอปพลิเคชันกำลังทำงานอยู่แล้ว RunAsDate เกาะเข้ากับโพรเซสที่กำลังทำงานได้ตั้งแต่เวอร์ชัน 1.40 ส่วน Chrono Mock เปิดแอปพลิเคชันเอง แอปที่เปิดใหม่ไม่ได้จึงอยู่นอกขอบเขตของมัน
- คุณต้องการหลายแอปพลิเคชันที่วันที่ต่างกันพร้อมกัน RunAsDate ให้วันที่ของตัวเองแก่แต่ละแอป ส่วน Chrono Mock ทำงานครั้งละหนึ่งเซสชัน
ทั้งสองอยู่ร่วมกันได้ด้วย ไม่มีอะไรที่นี่ห้ามคุณเก็บ RunAsDate ไว้สำหรับกรณีเร่งด่วน
สิ่งที่ทั้งสองไม่ได้มีไว้เพื่อ
เครื่องมือทั้งสองโผล่ในการค้นหาเรื่องการต่ออายุช่วงทดลองใช้ เครื่องมือนี้ไม่ได้ถูกสร้างมาเพื่อสิ่งนั้น และไม่มีตัวอย่าง พรีเซ็ต หรือหน้าใดที่นี่จะสาธิตมันเลย Chrono Mock มีไว้ทดสอบซอฟต์แวร์ที่คุณรับผิดชอบ - ไลเซนส์หมดอายุของคุณเอง ตรรกะการต่ออายุของคุณเอง รายงานสิ้นเดือนของคุณเอง
นั่นยังเป็นกรณีที่มีโอกาสทำงานน้อยที่สุดด้วย การป้องกันไลเซนส์อ่านเวลาเป็นประจำผ่านเส้นทางที่ถูกเลือกมาให้ดักยาก - หน้าข้อมูลโหมดผู้ใช้ที่ใช้ร่วมกัน การเรียกระบบโดยตรง เซิร์ฟเวอร์ - และนาฬิกาที่เดินถอยหลังเป็นเงื่อนไขที่โค้ดแบบนั้นถูกเขียนมาเพื่อตรวจจับ การตรวจสอบจะบอกคุณว่ามันไม่ได้ผล ซึ่งเป็นคำตอบที่ซื่อสัตย์ ไม่ใช่คำตอบที่เป็นประโยชน์