سؤال

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

لدي بضعة مشاريع تنشئ في Visual Studio 2008 باستخدام مشاريع C # و WinForm. يستخدم المرء النقر مرة واحدة، واستخدم واحد مشروع إعداد. كلاهما يسمح لك بمغادرة التطبيق قيد التشغيل عند إلغاء التثبيت. على نظام التشغيل Windows 7، يمكنك الحصول على تحذير، ولكن لديك خيار تركه يعمل على أي حال ... على XP ولا حتى تحذير.

اتصل بي مجنونا، لكن الفكر في جميع ملفات البرامج الخاصة بي التي تتم إزالتها، ولا يزال تطبيقي قيد التشغيل، لا يبدو وكأنه تصميم جيد على الإطلاق. ذكريات GPFS تعود إلى الذهن، أو الطريقة التي يستخدمها .NET تستخدم تأخير تحميل DLLS، كما يمكن أن تكون مشكلة عند تحميل DLL، وذهب.

هل هناك طريقة سهلة لعدم السماح بإلغاء التثبيت إذا كان تطبيقك لا يزال يعمل؟

أنا أستخدم C # ولكني أستخدم فئة مثيل واحد vb.net للتأكد من أن تطبيقي يعمل مرة واحدة فقط، لذلك ربما يكون هناك شيء يستفيد من ذلك بدلا من إنشاء Mutex للتحقق منه؟

أيضا تطبيقي يسمح فقط بتثبيت "لكل مستخدم"، وليس "جميع المستخدمين"، لذلك لا يجب أن أقلق بشأن التطبيق الخاص بي قيد التشغيل في جلسة أخرى (إذا كان كذلك، فلا بأس في البقاء قيد التشغيل لأنه يجب أن يكون 100٪ نسختها الخاصة).

تحرير: لأنني لا أجد أي شيء آخر، لقد جربت فكرة Mutex ولا تعمل. هنا رمزي:

في التطبيق لدي هذا لإنشاء Mutex المسمى والحفاظ على قيد الحياة أثناء تشغيل التطبيق: giveacodicetagpre.

في إجراء إلغاء التثبيت، لدي هذا الحلقة حتى يخرج (لأنه لا يبدو أنه من السهل تقديم خيار إلغاء): giveacodicetagpre.

CreateNew لم يتم تعيينه أبدا في إجراء إزالة التثبيت، كما هو تقريبا يعمل تحت جلسة مختلفة أو شيء من هذا. لم أحاول إضافة اسم Global \ على اسم Mutex، ولكن ذلك لن يعمل بشكل جيد في تطبيقي على أي حال لأنني أقوم بتثبيت المستخدم، لذلك يجب أن يكون تثبيت واحد قادرا على الاستمرار في تشغيل في جلسة أخرى حتى إذا تم إلغاء تثبيت المرء. < / ص>

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

المحلول

الإجابة القصيرة ليست هناك طريقة سهلة للقيام بذلك لأنه ليس شيئا تريد Microsoft القيام به.

قد انتهى إجابتي باستخدام mutex، بمجرد أن حصلت على الكود الصحيح يبدو أنه يعمل بشكل جيد.

في التطبيق أفعل: giveacodicetagpre.

singlestancapplication.run هو ما يدير التطبيق الخاص بك، أنا أستخدم إطار vb.net.

في عملية إلغاء تثبيت مخصص أقوم به: giveacodicetagpre.

في البداية كنت أستخدم m.releasemutex () بدلا من m.close () التي اكتشفت أنها كانت رمي استثناء لأنني لم امتلك mutex.Close كان ما كان يجب أن أستخدمه، فقط للتأكد من أن نسختي مغلقة قبل فحصها مرة أخرى (وإلا لم يكن النظير غير صحيح، إذا لم يكن الأمر صحيحا في المرة الأولى).

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