سؤال

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

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

وسأكون ممتنا أي مساعدة!!

شكرا لك مقدما!

    {
        System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName(SOME_PROCESS);
        p[0].Exited += new EventHandler(Startup_Exited);

        while (!p[0].HasExited)
        {
            p[0].WaitForExit();
        }

        //Application.Run();
    }

    private static void Startup_Exited(object sender, EventArgs e)
    {
        System.Diagnostics.Process.Start(AGAIN_THAT_SAME_PROCESS);  
    }
هل كانت مفيدة؟

المحلول

أنت بحاجة إلى حلقة ، وفي الجزء العلوي من الحلقة ، تحتاج إلى إعادة التوتر p إلى العملية الجديدة بعد إعادة تشغيل البرنامج. لذلك شيء مثل:

Process p = /* get the current instance of the program */;
while (true)
{
  p.WaitForExit();
  p = Process.Start(/* the program */);
}

لاحظ أنه نظرًا لأن Process.start يقوم بإرجاع كائن العملية للمثيل الجديد ، فأنت لا تحتاج فعليًا إلى إعادة أداء البحث: يمكنك فقط الانتظار مباشرة على كائن العملية الجديد.

نصائح أخرى

سأكون على استعداد للمراهنة على أنه ، عند بدء عمليتك مرة أخرى ، تحتاج إلى تحديث العملية التي تشير إليها P [0] إلى معالج الحدث الخاص بك. يبدو أنه بمجرد وفاته ، يطلق الحدث الخاص بك ولن يكون لديك معالج أحداث مسجل في عملية مرة أخرى.

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