ماذا تفعل وظائف الإغلاق في WIX وكيف يمكن للتطبيق الاستجابة لمثل هذه الإشارة

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

سؤال

في إعداد WIX الذي حصلت عليه ، عند ترقية التطبيق ، حددت شرطًا لإغلاق التطبيقات التي قد تتمسك بالملفات التي يجب تحديثها:

<util:CloseApplication
    Id="CloseMyApp" 
    Target="[MyAppExe]"
    CloseMessage="yes"
    Description="!(loc.MyAppStillRunning)"
    RebootPrompt="no"
    ElevatedCloseMessage="no"
/>

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

عندما يقوم المثبت بتشغيل CloseApplication ، يجد أنه يجب إيقاف التطبيق ، لكنه فشل في إغلاق طلبي. إحدى النظريات هي أن مربع الحوار يمنع التطبيق من الإغلاق.

لذا فإن السؤال هو: هل يمكن أن تكون هذه مشكلة محتملة؟ إذا كان الأمر كذلك - كيف يمكنني الحصول على مربع حوار التأكيد هذا وما زلت يتصرف بشكل صحيح عندما يطلب التثبيت التطبيق للإغلاق؟ هل يجب أن أستمع إلى رسائل Win32 (مثل WM_Quit/WM_Close) أم أن هناك واجهة برمجة تطبيقات .NET يمكنني استخدامها للاستجابة بشكل صحيح لهذه الأحداث؟

تحديث: وفق القائمة البريدية, ، سوف يرسل CloseApplication WM_Close إلى التطبيق. لا يزال لدي مشكلة في الحصول على سلوك مختلف إذا أغلق المستخدم التطبيق مقابل رسالة وثيقة تم إرسالها بواسطة WIX. لست متأكدًا من كيفية تحديد مصادر مختلفة لكيفية إغلاق التطبيق.

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

المحلول 2

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

نصائح أخرى

يجب أن يحصل التطبيق الخاص بك على WM_Close الذي يجب أن يظهر في تطبيق .NET الخاص بك كحدث "إغلاق" في النموذج الرئيسي. في معالجة ذلك ، يمكنك استخدام API Win32 getLastactactivePopup للتحقق من أي مربعات حوار نشطة ، تفتحها وإغلاقها حسب الاقتضاء.

يمكنك اختبار التنفيذ الخاص بك عن طريق فتح مدير المهام والقيام "بعملية نهاية" على التطبيق الخاص بك. سيحاول ذلك القيام بإغلاق لطيف أولاً باستخدام طريقة مماثلة لما يفعله WIX.

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