هل يمكن للمستخدمين التفاعل مع الخدمات مباشرة على Microsoft Vista؟

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

سؤال

من موقع Microsoft (انظر msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx.) يقول بوضوح "الخدمات لا يمكن أن تتفاعل مباشرة مع مستخدم اعتبارا من نظام التشغيل Windows Vista".

لذلك قررت اختبار هذا باستخدام "psexec -s cmd.exe". بقدر ما أعرف، "PSExec" يخلق خدمة من أجل فتح موجه الأوامر. وغني عن القول إنها عملت. ثم قررت استخدام "Enumwinsta Gui" بالاشتراك مع PSExec للتبديل إلى سطح المكتب Winlogon. لدهشتي، يمكنني حتى أن أبدأ "cmd.exe" على سطح المكتب هذا. هل هذا يعني عملية جديدة تم إنشاؤها من الخدمة يمكن أن تكون تفاعلية؟

أم أنه لأن PSEXEC يفعل نوعا من السحر الأسود؟ إذا كان الأمر كذلك كيف يفعل ذلك؟

أحاول عرض نافذة ملء الشاشة من خدمة إلى كائن سطح المكتب Winlogon في Vista وكذلك XP.

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

المحلول

لا يمكن أن يتفاعل الرمز قيد التشغيل في الخدمة مباشرة مع جلسة تفاعلية.

ومع ذلك، فإن التعليمات البرمجية التي تعمل كخدمة تتمتع بامتيازات كافية بإنشاء عملية جديدة تعمل ضمن سطح مكتب مستخدم معين - الحصول على الرمز المميز في مستخدم الجلسة التفاعلية واستدعاء CreateProcessasSer، على سبيل المثال.

يمكنك استخدام WTSGETACTIVECONSONSONED للحصول على جلسة وحدة التحكم النشطة، ودورة المستخدم الذي هو في الواقع على الجهاز. يمكن بعد ذلك استخدام Wtsqueryusertoken للحصول على الرمز المميز.

يمكن لخدمتك أيضا استخدام إعلامات تغيير الجلسة في دالة معالجها لمعرفة متى يقوم المستخدمون بتسجيل الدخول / تسجيل الخروج، وإلغاء تأمين جلسةهم، وهلم جرا.

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