سؤال

للوصول إلى أجهزة Windows CE من تطبيق سطح المكتب الخاص بي ، استخدمت DLL المكتوب ذاتيًا. استخدم هذا DLL RAPI لاستدعاء الوظائف اللازمة على جانب الجهاز. كل شيء يعمل بشكل جيد لسنوات.

لكن الآن أردت استخدام DLL في خدمة Windows. وفشل. يوضح Debug أن وظيفة cerapiinitex () تفشل. وقبل إخفاقه ، يتم حظره لمدة 5 ثوانٍ تقريبًا ، على الرغم من أن MSDN تقول إنها وظيفة غير متزامنة غير حظر. GetLasterror () يعطيني 1444L "معرف الخيط غير صالح".

ذكر شخص ما على الإنترنت أن Rapi لم يعمل من سلاسل الخدمة في ActiveSync 4. على الرغم من أن المعلومات فقيرة ومبهرة.

هل لدى أي شخص نفس المشكلة أو لديه ما يقوله؟ هل صحيح أن رابي لا يمكن الوصول إليه من خدمة Windows؟ إذا كان الأمر كذلك ، هل هناك أي حلول؟

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

المحلول

الحلول الممكنة لهذه المشكلة:

  1. خفض التصنيف إلى الإصدار 3.8 وإعطاء إذن الخدمة للتفاعل مع سطح المكتب (استخدم Applet System Services لهذا).
  2. تفرخ عملية مستخدم أخرى (CreateProcessasuser) واستخدمها كطبق بين الخدمة و Rapi (أي ، قم بإجراء جميع مكالمات Rapi في هذه العملية).
  3. قم بإنشاء تطبيق مستخدم آخر (غير خدمة) ، واستخدمه كطبقة داخلية بين الخدمة و Rapi (أي ، قم بإجراء جميع مكالمات Rapi في هذا التطبيق).
  4. قم بتشغيل رمز الخدمة كالمعتاد (على سبيل المثال ، وحدة التحكم).
  5. قم بالتبديل من Rapi إلى واجهات أخرى للتواصل مع الجهاز ، على سبيل المثال TCP.

لقد اخترت الأول ، شخصياً ، لأنه الأكثر ملاءمة في حالتي.

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