كيفية تحديث ملف exe من المضيف البعيد - c# 4.0 - تطبيق wpf

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

  •  29-10-2019
  •  | 
  •  

سؤال

أريد تحديث exe من الملقم البعيد.لذلك عند النقر فوق الزر على تطبيق wpf فإنه سيتم تحميل عن بعد و أيضا بعيد ملف txt و تحل محل تلك الحالية في نفس المجلد الذي exe تشغيل.لذلك سوف الكتابة الحالية txt و ملف exe بينما exe يعمل.كيف يمكن تحقيق هذا ؟

المضيف البعيد هو رابط مثل www.mydomain.com/MyAPP.exe

تطبيق wpf , c# 4.0

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

المحلول

كانت الطريقة التي تم بها حل هذه المشكلة هي إنشاء shell exe الذي تم تثبيته ونشره في البداية على أجهزة العملاء.

يتم تخزين البرنامج القابل للتنفيذ "الحقيقي" في دليل فرعي لهذا التطبيق الأولي.عندما يتم تشغيل تطبيق shell ، بعد تنزيله وتثبيته أي تحديثات للتطبيق الحقيقي ، فإنه يبدأ تشغيل التطبيق الحقيقي القابل للتنفيذ في AppDomain منفصل.

فيما يلي جوهر التطبيق "الحقيقي" الذي يتم تشغيله من داخل تطبيق shell:

Genacodicetagpre

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

نصائح أخرى

الحل يعتمد على حالة معينة.ولكن لا يوجد مستقيم الحل, لأنه لا يمكنك تحديث الجمعيات في حين يتم تحميلها في الذاكرة المستخدمة.يمكنني أن أقترح 2 حلول:باستخدام نسخ الظل و باستخدام نوع من مساعد للتنفيذ.لقد استعملت كل منهم.

الظل النسخ.

طريقة واضحة هي أن تجعل النظام الخاص بك الرئيسية للتنفيذ أن يكون الظل نسخ, محل ذلك في حين الخاص بك تشغيل التطبيق ثم إعادة تشغيل التطبيق.ولكن كنت لا يمكن أن تجعل النظام الخاص بك التطبيق الافتراضي المجال أن يكون الظل نسخ فقط التطبيق الثانوي المجالات يمكن أن يكون.ولكن كنت لا تزال لا يمكن نقل كافة التعليمات البرمجية الخاصة بك إلى جمعية أخرى (مثلا ، MainAppLib.dll) و كتابة الرئيسي الخاص بك التطبيق القابل للتنفيذ (MainApp.exe) بحيث يحتوي على "محمل كود".هذا المحمل رمز لخلق آخر التطبيق المجال, مجموعة أن يكون الظل نسخ ثم قم بتشغيل البرنامج المنطق في الثانوية التطبيق المجال.حذار ليس لديهم أي إشارات مباشرة من التطبيق الرئيسي في المجال MainAppLib.dll ثم لأن هذه الجمعية سيتم تحميل في التطبيق الرئيسي المجال الذي لا ظل نسخ ملف التجميع سوف تحصل على مؤمن.في معظم الحالات يمكنك الذهاب مع AppDomain.ExecuteAssembly() الأساليب.

مساعد تنفيذي

والفكرة هي أن استخدام نوع من تحديث التشطيب.الرئيسي الخاص بك التطبيق لا يزال دون تغيير, يمكنك فقط إضافة كمية قليلة من التعليمات البرمجية, حيث أن التطبيق الخاص بك سيتم تحميل التحديث وضعه في مجلد مؤقت ثم الرئيسي الخاص بك يبدأ التطبيق تحديث التشطيب (في عملية منفصلة) و المخارج.تحديث التشطيب ينتظر حتى التطبيق الخاص بك يغلق ثم نسخ الملفات من مجلد مؤقت في مجلد التطبيق استبدال جميع الملفات.تحديث التشطيب لا يمكن أن تحل محل الخاصة للتنفيذ ولكن يمكن أن يتم ذلك عن طريق التطبيق الرئيسي قبل أن يبدأ التحديث التشطيب.بعد نسخ ملفات التحديث التشطيب تشغيل التطبيق الخاص بك.

p.s. أنا شخصيا أفضل السابق الحل لأنه ينطوي على نوع من سحر الفودو باستخدام التطبيق المجالات, انعكاس, جمعيات هـ.t.ج.وأنها يمكن أن تكون تطورت إلى استخدام الإضافات إذا كنت بحاجة إلى (مثلا ، عبر MEF إطار).ولكن هذا الأخير هو الأسهل فهم لا سيما إذا كان لديك لم يعمل مع التطبيق المجالات و دليل الجمعيات تحميل, انها واضحة تماما.

ربما يمكنك استخدام ClickOnce (بناء على تعليقك أعلاهستكون مستعدا لتحصل على مجموعة أخرى تحصل على EXE .... كما ذكر الملصق الآخر الذي لا يمكنك استبدال مجموعة قيد التشغيل).يمكنك تكوينه للتحقق في أوقات مختلفة (E.G. عند بدء التشغيل) للحصول على إصدارات جديدة وتنزيلها تلقائيا.إنه حل قوي للغاية ويمكنك القيام بالكثير مع تجميعات النشر.

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