كيف يمكنك التواصل بين Windows Vista Session 0 وسطح المكتب؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

في الإصدارات السابقة من نظام التشغيل Windows قبل نظام التشغيل Vista، كان من الممكن أن يكون لديك خدمة Windows تتفاعل مع مستخدم سطح المكتب الحالي الذي قام بتسجيل الدخول لعرض المعلومات بسهولة على الشاشة من الخدمة.في Windows Vista تمت إضافة الجلسة 0 للأمان لعزل الخدمات عن سطح المكتب.ما هي الطريقة السهلة للتواصل بين الخدمة والتطبيق الذي يعمل خارج الجلسة 0؟لقد تمكنت حتى الآن من التغلب على هذا الأمر باستخدام TCP/IP للتواصل بين الاثنين ولكن يبدو أنها طريقة غير متقنة للقيام بذلك.

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

المحلول

يمكنك استخدام الذاكرة المشتركة أو توجيه الإخراج المسمى لتسهيل IPC أيضًا.من الناحية النظرية، هذا مشابه لـ TCP/IP، لكن لا داعي للقلق بشأن العثور على منفذ غير مستخدم.

يجب عليك التأكد من أن الكائنات المسماة التي تقوم بإنشائها مسبوقة بـ "Global\" للسماح بالوصول إليها من خلال كافة الجلسات كما هو موضح هنا.

AFAIK لم تعد هناك طريقة للخدمة للتفاعل مباشرة مع سطح المكتب بعد الآن.

نصائح أخرى

في الواقع، لأسباب أمنية، لم يعد من الممكن التواصل مباشرة مع "سطح المكتب".ما هو بالضبط "سطح المكتب" على أي حال، عندما تعيش في جهاز به عدة مستخدمين نشطين + جلسات عمل عن بعد؟

الطريقة العامة لحل المشكلة هي استخدام تطبيقات الخدمة التي تتواصل عبر بعض آليات RPC (TCP/IP، IPC، .Net Remoting Channels عبر إحدى هذه الآليات، وما إلى ذلك).إنه نوع من الألم، ولكن أعتقد أن الفوائد تستحق التغيير.

لكي تتمكن الخدمة من التحدث إلى سطح المكتب، فأنت عالق إلى حد كبير في إحدى آليات RPC.آلية العمل عن بعد .NET (IpcServerChannel) ليس من الصعب تنفيذه لهذا الغرض.

أيضًا باستخدام .NET، يمكن لتطبيق سطح المكتب إرسال رسائل مباشرة إلى الخدمة باستخدام ServiceController.ExecuteCommand.يتم استلام هذه الأوامر بواسطة الخدمة عبر ServiceBase.OnCustomCommand.وهذا أسهل للقيام به، وسيكون كل ما تحتاجه إذا كان التحكم في الخدمة هو مطلبك الوحيد.

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