سؤال

لدي C# التطبيق التي تحتج غير مدارة C++ التطبيق عبر عملية.Start()

على بعض الأجهزة ، إذا كان هذا C++ التطبيق إحباط أنا مع ترك الوقت في مربع حوار الخطأ تظهر

هل هناك طريقة من C# إلى الكشف عن أن C++ التطبيق لديه errored و إعادة تشغيله

(ليس لدي مصدر وبالتالي لا يمكن تعديل C++ التطبيق)

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

المحلول

والحوار مصحح JIT يظهر لأن ++ C التطبيق تحطمت بطريقة أو بأخرى. في حين أن الحوار مفتوح، والعملية لا تزال موجودة (ولكن مع وقف التنفيذ) وهو ما يعني أن الطبقة العملية لن تنظر فيه أن يكون "خرجت" حتى يتم رفض الحوار JIT أو المصحح المرفقة ينتهي العملية.

هل يمكن إما تعطيل JIT التصحيح على آلات تعاني من مشكلة (I <م> التفكير أن تعطيل خدمة إدارة Debug الجهاز قد تعطيل JIT التصحيح)، مما يسمح التطبيق لتحطم الطائرة ويموت (وبالتالي، التقرير بأنه "خرجت")، أو (وليس لدي فكرة كيف لك أن تذهب عن القيام بذلك) معرفة ما إذا كان يمكنك جعل حياتك المضيف C # التطبيق إرفاق نفسها على أنها المصحح لC ++ التطبيق وتلقي إخطارا من الحادث من C ++ التطبيق، إنهائه، ومن ثم التصرف بناء على المعلومات التي قد انتهت.

نصائح أخرى

إذا كان C++ هو أساس وحدة التحكم يمكنك التحقق من أمرين ،

  1. على exitcode عادة 0 يعني مغلقة عادة وإلا هو المشكلة (ولكن أعتقد أن هذا يعتمد على الاتفاقية المستخدمة في تطوير هذه التطبيقات)

  2. تحقق معيار الخطأ إذا كان فارغا, لذلك كل شيء على ما يرام

    باستخدام(عملية p = عملية جديدة()) {

     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardError = true;
     p.StartInfo.FileName = "any.exe";
     p.Start();
     string error = p.StandardError.ReadToEnd();
     p.WaitForExit()
     if(error.Length == 0 && p.ExitCode == 0)
     {
     }
    }
    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top