سؤال

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

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

المحلول

وإذا كنت تقوم بتشغيل NET 2.0 أو أعلى، يمكنك استخدام <لأ href = "http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.stop" يختلط = "نوفولو noreferrer "> ServiceBase.Stop لإيقاف الخدمة من OnStart. استدعاء وإلا توقف من موضوع جديد.

<الإضراب> المرجع [devnewsgroups] ( HTTP: / /www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx )

و(مجموعة أخبار ذهب)

نصائح أخرى

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

والعينة يحقق أقل من ثلاثة أشياء. 1 - يؤدي وضع ExitCode في رسالة مفيدة للمستخدم النهائي. ولا يؤثر سجل التطبيق ويندوز ولكن لا تشمل رسالة في سجل النظام. 2 - دعوة النتائج وقف في "الخدمة بنجاح توقف" رسالة في سجل التطبيق. 3 - رمي النتائج استثناء في إدخال سجل مفيدة في سجل التطبيق

.
protected override void OnStart(string[] args) {

  try {
    // Start your service
  }
  catch (Exception ex) {
    // Log exception
    this.ExitCode = 13816;
    this.Stop();
    throw;
  }

}

نقل كافة بدء التشغيل الخاص بك المنطق منفصل الأسلوب ، ورمي الاستثناءات (أو الاتصال OnStop) من أن منفصل الأسلوب.

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

أيضا مع منفصلة طريقة بدء التشغيل ، يمكنك استخدام تقنية مثل هذا التصحيح دون ربط. http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx

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