RunAsDate का विकल्प, उन हिस्सों के साथ जो ग़ायब थे
RunAsDate वर्षों से “Windows पर इस प्रोग्राम को अलग तारीख़ पर चलाओ” का जवाब रहा है, और वह एक अच्छा जवाब है। यह पेज इस बारे में है कि दोनों कहाँ अलग हैं, और RunAsDate अब भी कहाँ बेहतर चुनाव है।
आमने-सामने
| RunAsDate | Chrono Mock | |
|---|---|---|
| एक ऐप्लिकेशन को नक़ली तारीख़ पर चलाता है | हाँ | हाँ |
| सिस्टम घड़ी को अकेला छोड़ता है | हाँ | हाँ |
| रोके गए समय फ़ंक्शन | 5 | 44 (30 खिसकाए गए, 14 केवल गिने गए) |
| असली समय से तेज़ घड़ी | उपलब्ध नहीं | कोई भी पूर्ण गुणक |
| घड़ी को जमाना | हाँ, डिफ़ॉल्ट रूप से | हाँ |
| ऐप चलते समय छलाँग | केवल तय सेकंड बाद असली तारीख़ पर लौटना | आगे और पीछे, किसी भी पल पर |
| केवल उस प्रोसेस के लिए टाइम ज़ोन | दस्तावेज़ में नहीं | हाँ, स्थिर ऑफ़सेट |
| चाइल्ड प्रोसेस सत्र विरासत में पाते हैं | दस्तावेज़ में नहीं | हाँ |
| पहले से चल रहे ऐप्लिकेशन से जुड़ना | हाँ, संस्करण 1.40 से | नहीं - यह ऐप्लिकेशन को ख़ुद शुरू करता है |
| अलग-अलग तारीख़ों पर कई ऐप्लिकेशन एक साथ | हाँ | नहीं - एक समय में एक सत्र |
| बताता है कि काम किया या नहीं | नहीं | निर्णय, हर चैनल के लिए, कॉल-गिनती के साथ |
| Electron और Chromium ऐप्लिकेशन | दस्तावेज़ में नहीं | अलग तंत्र |
| CI के लिए कमांड लाइन | हाँ | हाँ, एग्ज़िट कोड और JSON के साथ |
| सोर्स कोड | फ़्रीवेयर, बंद | GPL-3.0 |
| आकार | 47 KB का डाउनलोड, 64-बिट के लिए 57 KB | कमांड लाइन लगभग 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 को रोकता है। बहुत-से ऐप्लिकेशन के लिए यह सचमुच काफ़ी है, क्योंकि वॉल क्लॉक वहीं पढ़ी जाती है।
बाकी सतह वह जगह है जहाँ तारीख़ पर निर्भर कोड छिपा रहता है:
- टाइम ज़ोन - उसे बताने वाले दो फ़ंक्शन, और ज़ोन के बीच बदलने वाले छह फ़ंक्शन, जिनकी वजह से रिपोर्ट ग़लत दिन पर पहुँच जाती है
- बीते-समय का अक्ष - टिक की गिनतियाँ और बिना-झुकाव वाला इंटरप्ट टाइम, जो ट्रायल का काउंटडाउन आम तौर पर नापता है
- स्लीप, ताकि देरी असली घड़ी पर नहीं, सत्र की घड़ी पर देरी हो, और ऑब्जेक्ट पर प्रतीक्षा, जो गिनी जाती है और अपनी असली अवधि रखती है
- टाइमर - वेटेबल, विंडो, थ्रेड-पूल और मल्टीमीडिया
- प्रोसेस निर्माण, ताकि इंस्टॉलर की चाइल्ड प्रोसेस आज के दिन की जगह उसी सत्र में चलें
- नेटवर्क कनेक्शन, इस संकेत के रूप में गिने जाते हैं कि समय किसी सर्वर से आ सकता है
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 उस सॉफ़्टवेयर को परखने के लिए है जिसकी ज़िम्मेदारी आपकी है - आपके अपने लाइसेंस की समाप्ति, आपका अपना नवीनीकरण तर्क, आपकी अपनी माह-अंत की रिपोर्ट।
यह वह मामला भी है जिसके काम करने की सबसे कम संभावना है। लाइसेंस सुरक्षा नियमित रूप से समय उन रास्तों से पढ़ती है जो रोकने में कठिन चुने जाते हैं - साझा यूज़र-मोड डेटा पेज, सीधे सिस्टम कॉल, एक सर्वर - और घड़ी का पीछे चलना वह स्थिति है जिसे पकड़ने के लिए ऐसा कोड लिखा जाता है। ऑडिट आपको बताएगा कि यह काम नहीं किया, जो ईमानदार जवाब है, उपयोगी जवाब नहीं।