سؤال

هناك الكثير من الحلول لتقييد التطبيق من التشغيل مرتين. البحث حسب اسم العملية ، باستخدام mutex المسماة وما إلى ذلك ، لكنني كل هذه الطرق لا تعمل إذا كنت أرغب في تقييد طلبي على جلسة shell.

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

هل هناك طريقة للحصول على معرف قذيفة يمكن وضعه بعد ذلك في اسم Mutex؟

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

المحلول

يمكنك إنشاء Mutexes المحلية (الجلسة فقط) أو Global (النظام الكامل). يرى http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx لمزيد من المعلومات. ابحث عن العالمية والمحلية.

نصائح أخرى

معرف Shell الذي تريد استخدامه هو اسم المستخدم. هذا متاح مثل Environment::UserName أو GetUserName()

يمكنك الانتقال من معرف العملية للعملية الحالية إلى معرف جلسة WTS ، وأعتقد أن هذا سيفعل ما تحتاجه. ProcessIdTosessionId

يجب أن تدرك أنه يمكن فصل جلسة الخدمات الطرفية عن سطح مكتب واحد ثم متصلاً من قبل آخر ، بحيث يمكن أن تتغير "shell" بالفعل ، ولكن يجب أن يظل معرف الجلسة كما هو.

إذا كنت ترغب في تقييده على مثيل واحد لكل جلسة تسجيل الدخول ، حتى لو كان حساب المستخدم نفسه يحتوي على جلسات تسجيل دخول متعددة تعمل في نفس الوقت (خادم/خادم طرفي) ، يمكنك استخدام المقبض من المقبض GetShellWindow للتحقق مما إذا كان هناك مثيل يعمل بالفعل لسطح المكتب هذا.

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