سؤال

لقد قمت بإنشاء تطبيق WinForm (مراقبة) باستخدام VS 2005 (C#) ، والآن ، لدي مشكلة عندما يتعطل هذا التطبيق لسبب ما ، يجب أن أتأكد من إعادة تشغيله تلقائيًا.

كيف يمكنني حل هذا؟ (ربما باستخدام تطبيق Windows Services؟)

شكرًا

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

المحلول 6

شكرًا لكم جميعًا ، الحل الذي أختاره هو: في البرنامج الرئيسي ، أضف أحداث استثناء (UnhandledExceptionEventHandler & ThreadExceptionEventHandler انظر أعلاه) في هذه الأحداث أقوم بإعادة تشغيل البرنامج (أيضًا وضع السجل والبريد الإلكتروني على أخطاء تتبع). وبالنسبة لمشكلة إعادة التشغيل ، أضيف مفتاح التسجيل في [hkey_local_machine software microsoft windows currentversion run] مع مسار التطبيق الخاص بي للتأكد من إعادة تشغيل طلبي بعد إعادة تشغيل Windows ؛)

نصائح أخرى

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

مع التعامل مع الأخطاء الجيدة والإبلاغ ، يمكنك كتابته بحيث يوضح ببساطة أي أخطاء تحدث وتستمر ، والتي ستكون IMHO أفضل طريق للذهاب

النظر في هذا:

http://msdn.microsoft.com/en-us/library/cc303699.aspx

[DllImport("kernel32.dll")]
public static extern int RegisterApplicationRestart(
    [MarshalAs(UnmanagedType.BStr)] string commandLineArgs,
    int flags);

الحد الأدنى من الخادم المدعوم

Windows Server 2008

http://msdn.microsoft.com/en-us/library/AA373347(VS.85).aspx

يعد إنشاء خدمة Windows فكرة جيدة جدًا لأي عملية خلفية طويلة الأمد لعدة أسباب ، ومع ذلك ، فإن إعادة بدء تطبيق تحطم ليس واحداً منهم!

يجب أن توضح سبب تعطل التطبيق ومنع حدوثه.

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

إلى عن على*نص قوي* تطبيق مراقب. يجب عليك إنشاء مؤقت على خدمة Windows ورمزه لشيء مثل هذا في حدث Timer Tick:

        Process[] procs = Process.GetProcessesByName("you app name");
        if (procs.Length == 0)
            Process.Start("your app filename");

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

    [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        catch(Exception ex)
        {
            //log the exception here
            Application.Restart();
        }
    }

نظرًا لأنك تقول إنك تستخدم تطبيق Windows Forms ، لا يمكنك استخدام خدمة Windows لذلك ، نظرًا لأنه لا يُسمح لخدمة Windows بوجود واجهة المستخدم الرسومية.

ما سأفعله ، سأقوم بإنشاء تطبيق "مراقبة" غير مرئي يراقب العملية ويعيد تشغيله تلقائيًا عند تعطله.

يمكنك وضع مجموعة تجرب حول الكود الذي من المرجح أن يتسبب في تحطم الطائرة. ثم اكتب رسالة الاستثناء إلى ملف السجل. يمكنك أيضًا تعيين نقطة تصحيح في كتلة الصيد لرؤية تفاصيل أخرى مثل مكدس المكالمات ، إلخ.

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