كيفية معرفة ما إذا كانت الطريقة مطلوبة من خدمة Windows في التعليمات البرمجية .NET (المدارة)

StackOverflow https://stackoverflow.com/questions/911921

  •  06-09-2019
  •  | 
  •  

سؤال

كيف يمكنني معرفة ما إذا كانت الطريقة التي أكتبها في التعليمات البرمجية المدارة هي الاتصال من تطبيق تفاعلي مقابل خدمة Windows؟

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

المحلول 2

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

نصائح أخرى

أي جزء من خدمة Windows هو الذي تريد معرفته عنه؟ أو أي جزء من التطبيق التفاعلي لا تريد أن تعرف عنه؟ ما يهم في الواقع لك؟


في أي وقت أسمع طلبا مثل هذا، فمن الأفضل تقريبا خطأ في التصميم. أود أن أقترح بعض الإجابات:

  1. دع المتصل يخبرك بالذي يرتكب الاستخدام أو
  2. ضع اسم الفئة الهامة في ملف التكوين. اطلب من جميع الأورام تنفذ نفس الواجهة. عند وقت التشغيل، في المرة الأولى التي تحتاج فيها إلى تكاليف، قم بإنشاء مثيل واحد محدد في ملف التكوين، ثم اتصل به من خلال الواجهة الشائعة.
  3. لا إعادة اختراع العجلة. استخدم الفئات في system.diagnostics، والتي، في الواقع، تكوين الكثير مثل بلدي # 2.

من الخطأ دائما تقريبا أن تكون التعليمات البرمجية حساسة للسياق الذي تم استدعاؤه فيه.

هناك ما لا يقل عن 2 طرق للقيام بذلك:

  1. "system.reflection.gesembly.getCallingAssembly (). الاسم الكامل" سيعود اسم التجميع الذي يدعو التعليمات البرمجية الخاصة بك.
  2. "البيئة .stackTrace" سوف ترجع أثر المكدس الكامل لمن يسمى الكود الخاص بك. يجب أن ترى اسم طريقة الاتصال الخاصة بك في السلسلة.

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

لا أعرف ما إذا كان هناك إمكانية مدمجة، ولكن إلقاء نظرة على System.Diagnostics.Process صف دراسي. لديها، من بين أمور أخرى، GetService() طريقة، ربما ستساعدك ذلك. إذا فشل ذلك، هناك StartInfo عضو قد يحتوي على معلومات مفيدة.

إذا كنت لا تمانع في استخدام Pinvoke، فيمكنك الحصول على العملية الأصل العملية الحالية. إذا كان يعمل بموجب الحساب نظام NT النظام وهو الاسم هو service.exe., ، العملية الحالية هي خدمة (على الأرجح).

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