سؤال

لا أحد يعرف من وسيلة لاكتشاف ما إذا كان قد فشل التطبيق عن بعد / تحطمت؟ أنا يعني عندما يصبح غير قابل للاستخدام - كنت عادة ما نرى "عدم استجابة" في شريط العنوان، في هذه الحالة - ولكن المفتاح هو أن التطبيق لا يزال قيد التشغيل. ولمجرد العثور على عملية لم تعد تعمل لا يكفي.

وWMI لا يدعم استخدام System.Diagnostics.Process.Responding على جهاز بعيد .. والتي يبدو أن هناك خصائص أخرى WMI I يمكن الاستعلام في Win32_Process لهذا النوع من المعلومات.

هل كانت مفيدة؟

المحلول

في تحديد "من مدى الحياة" برنامج من المهم قياس هذا الجانب ويحدد كونها على قيد الحياة بطريقة مفيدة.

وعدة نهج "وكيل" بسيطة وجذابة بشكل سطحي بسبب بساطتها ولكن في الأساس لا تقيس الجانب المهم.

ولعل أكثرها شيوعا هي "هل عملية قيد الحياة" و "ضربات القلب منفصل موضوع البث" ربما لأنها بسيطة جدا القيام به:

bool keepSending = true; // set this to false to shut down the thread
var hb = new Thread(() => 
    {
         while (true)
             SendHeartbeatMessage();   
    }).Start();

وكل من هذه ولكن لديها عيب خطير، إذا كان موضوع العمل الحقيقي (ق) في التطبيق حبس (ويقول الخوض في حلقة لا نهائية أو حالة توقف تام) ثم سوف تستمر في إرسال بمرح من الرسائل موافق. لرصد تستند عملية سوف تستمر لرؤية عملية "على قيد الحياة" على الرغم من أنه لم يعد أداء انها المهمة الحقيقية.
يمكنك تحسين موضوع واحد في العديد من الطرق (زيادة كبيرة في التعقيد وفرصة خيوط القضايا) من خلال طبقات في اختبارات للتقدم في موضوع الرئيسي ولكن هذا يستغرق حل الخطأ ويحاول دفعها نحو الحق واحد.

ما هو الأفضل لجعل هذه المهمة (ق) التي يؤديها جزء من برنامج التحقق من مدى الحياة. ربما لضربات القلب مباشرة من الترابط الرئيسي بعد كل مهمة فرعية القيام به (مع عتبة للتأكد من أنه لا يحدث في كثير من الأحيان)، أو لننظر ببساطة في الإخراج (إن وجد) والتأكد من أن المدخلات مما أدى إلى مخرجات.

ومن أفضل من ذلك للتحقق من صحة هذا داخليا (داخل البرنامج) وخارجيا (خاصة إذا كان هناك المستهلكين الخارجي / مستخدمي البرنامج). إذا كان لديك خادم الويب: محاولة لاستخدامها، إذا تطبيقك بعض النظام القائم حلقة الحدث: أحداث الزناد الذي يجب أن تستجيب (والتحقق من الإخراج هو الصحيح). كل ما يتم النظر دائما ان كنت ترغب في التحقق من أن <م> فائدة والسلوك الصحيح يحدث بدلا من مجرد أي نشاط على الإطلاق.

وكلما تحقق ليس فقط وجود البرنامج، ولكن هذا <م> الإجراءات وأكثر فائدة الشيك سيكون. سوف تحقق أكثر من نظام وكذلك كنت وضعت نفسك من الحالة الداخلية، إذا قمت بتشغيل عملية الشاشة على مربع قد تحقق فقط الاسترجاع المحلي، يلوذ بالفرار مربع يؤكد أكثر من ذلك بكثير من المكدس الشبكة بما في ذلك الجوانب غالبا ما ينسى مثل DNS .

وحتما هذا يجعل التحقق من الصعب القيام به، لأنك تفكر في جوهرها حول مهمة محددة بدلا من الحل العام، ينبغي للأرباح من هذا يحقق فوائد كافية لهذا النهج الذي ينبغي النظر بجدية في كثير من الحالات.

نصائح أخرى

ومن الصعب معرفة ما إذا كان التطبيق قد تحطمت أو يقوم به في الواقع شيئا مفيدا.

والنظر في هذا:

 while(true);

والمعالج هو (جدا) مشغول. وأنه قد تستجيب حتى لو كان هذا هو الحال في موضوع مستقل. ومع ذلك، وهذا هو السلوك غير المرغوب فيه حقا منذ التطبيق لا يعمل بعد الآن.

وأفضل طريقة لمعالجة هذه هي لدوري (في بعض النقاط في البرنامج) إضافة بعض العدادات وبث هذه. والتطبيق الوكالة الدولية للطاقة يمكن الاستماع لهذه البرامج، وإذا كانوا لا يصلون أو معنى بعد الآن (العداد لا تضيف ما يصل) ثم يمكنك قتل العملية وإعادة تشغيله.

والإذاعة ويمكن أن يتم بطرق متعددة. الأسهل هو مجرد كتابة عدادات إلى ملف (تأكد من تأمين الملف عند الكتابة في ذلك حتى عملية القراءة لا تحصل على ملف المهترئ نصف عندما يتم قراءته في نفس الوقت بالضبط)

وسائل أكثر تقدما لاستخدام أنابيب اسمه، أو إلى استخدام مأخذ. UDP المقبس من السهل جدا أن الإعداد والاستخدام في هذه الحالة. لا تقلق بشأن "packetloss" منذ على شبكة محلية هذا يحدث أبدا تقريبا

ويمكنك استخدام آلية الاقتراع ونسأل دوريا وضع التطبيق البعيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top