Chrono Mock
اللغةالعربية

بديل لـ RunAsDate، مع الأجزاء التي كانت ناقصة

ظلّ RunAsDate سنوات هو الجواب عن «شغّل هذا البرنامج بتاريخ مختلف في Windows»، وهو جواب جيد. وهذه الصفحة عن مواضع الاختلاف بين الأداتين، وعن المواضع التي يبقى فيها RunAsDate الخيار الأفضل.

جنبًا إلى جنب

 RunAsDateChrono Mock
يشغّل تطبيقًا واحدًا بتاريخ مزيّفنعمنعم
يترك ساعة النظام وشأنهانعمنعم
دوال الوقت المُعترَضة544 (30 مُزاحة، 14 معدودة فقط)
ساعة أسرع من الوقت الحقيقيغير متاحأي مُضاعِف بعدد صحيح
تجميد الساعةنعم، افتراضيًانعم
القفز أثناء تشغيل التطبيقالعودة إلى التاريخ الحقيقي فقط، بعد عدد محدد من الثوانيإلى الأمام وإلى الخلف، إلى أي لحظة
منطقة زمنية لتلك العملية وحدهاغير موثّقنعم، إزاحة ثابتة
العمليات الفرعية ترث الجلسةغير موثّقنعم
الارتباط بتطبيق يعمل بالفعلنعم، منذ الإصدار 1.40لا - إنه يشغّل التطبيق بنفسه
عدة تطبيقات بتواريخ مختلفة في وقت واحدنعملا - جلسة واحدة في كل مرة
يخبرك هل نجحلاحكم، لكل قناة، مع عدد الاستدعاءات
تطبيقات Electron وChromiumغير موثّقآلية منفصلة
سطر أوامر لـ CIنعمنعم، مع رموز الخروج وJSON
الشيفرة المصدريةبرنامج مجاني مغلق المصدرGPL-3.0
الحجمتنزيل بحجم 47 كيلوبايت، و57 كيلوبايت لإصدار 64 بتنحو 2.4 ميغابايت لسطر الأوامر، ونحو 70 ميغابايت مع النافذة
إصدارات Windows القديمةحتى Windows 2000Windows 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 كيلوبايت، وليست فيه نافذة تتعلّمها، وهو يفعل هذا بالضبط منذ سنوات طويلة.
  • أنت على Windows أقدم. يعود RunAsDate إلى Windows 2000. وهذه الأداة تستهدف Windows 10 و11 ولم تُختبر على ما هو أقدم.
  • الحجم مهم. تنزيل بحجم 47 كيلوبايت مقابل نحو 2.4 ميغابايت لسطر الأوامر، أو نحو 70 ميغابايت مع النافذة، ليست مقارنة متقاربة.
  • لا تريد حكمًا. قياس التغطية يعني قراءة النتيجة. وإذا كان الاختبار عابرًا فهذا عبء لم تطلبه.
  • التطبيق يعمل بالفعل. يستطيع RunAsDate منذ الإصدار 1.40 الارتباط بعملية قيد التشغيل. أما Chrono Mock فيشغّل التطبيق بنفسه، لذا فالتطبيق الذي لا يمكن إعادة تشغيله خارج متناوله.
  • تريد عدة تطبيقات بتواريخ مختلفة في وقت واحد. يمنح RunAsDate كل تطبيق تاريخه الخاص. أما Chrono Mock فيدير جلسة واحدة في كل مرة.

والاثنان يتعايشان أيضًا. فلا شيء هنا يمنعك من إبقاء RunAsDate للحالة السريعة.

ما لا تُقصد به أيٌّ منهما

تظهر الأداتان كلتاهما في عمليات البحث عن تمديد الفترات التجريبية. وهذه الأداة لم تُبنَ لذلك، ولن يعرض أي مثال أو إعداد مسبق أو صفحة هنا ذلك قط. فـ Chrono Mock لاختبار برمجيات أنت مسؤول عنها - انتهاء ترخيصك أنت، ومنطق التجديد عندك، وتقرير نهاية الشهر لديك.

وهي أيضًا الحالة الأقل احتمالًا أن تنجح. فحماية التراخيص تقرأ الوقت بانتظام عبر طرق اختيرت لصعوبة اعتراضها - صفحة البيانات المشتركة في وضع المستخدم، والاستدعاءات المباشرة للنظام، وخادم - وتحرّك الساعة إلى الوراء شرط كُتبت تلك الشيفرة لكشفه. وسيخبرك التدقيق أنه لم ينجح، وهذا هو الجواب الصادق لا المفيد.

جرّبه