كيف يجب أن تنفذ بشكل تلقائي التحديث ؟

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

  •  04-07-2019
  •  | 
  •  

سؤال

العديد من البرامج تشمل التحديث التلقائي ، حيث البرنامج أحيانا تبدو على الانترنت للحصول على التحديثات ، ثم تنزيل ينطبق أي التحديثات التي تم العثور عليها.البرنامج يتم إصلاح الخلل ، ودعم يتم تعديل الملفات و الأمور هي (عادة) يتم على نحو أفضل.

للأسف مهما كان صعبا وأنا أنظر, أنا لا يمكن العثور على معلومات عن هذه العملية في أي مكان.يبدو أن صناعة السيارات في المحدثات التي تم تنفيذها إما ملكية أو لا تعتبر مهمة.

يبدو من السهل إلى حد ما تطبيق النظام الذي يبدو للحصول على التحديثات على الشبكة والتحميل منها إذا كانت متوفرة.هذا جزء من التحديث التلقائي سوف تتغير بشكل كبير من تنفيذ التنفيذ.السؤال هو ما هي أساليب مختلفة من تطبيق بقع.فقط تحميل الملفات و استبدال القديمة بأخرى جديدة ، إدارة الهجرة النصي التي تم تنزيلها ، قرد الترقيع أجزاء من النظام ، وما إلى ذلك ؟ المفاهيم هي المفضلة ، ولكن الأمثلة في Java, C, Python, Ruby, Lisp, الخ.سيكون موضع تقدير.

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

المحلول

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

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

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

ونحن ربما يمكن أن تساعد على نحو أفضل إذا كنت الضيقة المعلمات.

تحديث:نهج "الترقيع" يعتمد أيضا على طبيعة الطلب ، هناك تنوع واسع هنا.إذا كان لديك ملف تنفيذي واحد, على سبيل المثال, ثم هو على الأرجح الأكثر عملية استبدال الملف القابل للتنفيذ.إذا كان التطبيق الخاص بك يحتوي على العديد من الملفات ، عليك أن تبحث عن سبل للحد من عدد من الملفات استبدالها.إذا كان التطبيق الخاص بك مخصصة للغاية أو معلمات, يجب أن نسعى جاهدين للحد من إعادة الخياطة الجهد.إذا كان التطبيق الخاص بك يستخدم تفسير رمز (مثل Excel VBA تطبيق أو مرض التصلب العصبي المتعدد الوصول MDB الطلب), ثم كنت قد تكون قادرة على استبدال أجزاء من التعليمات البرمجية.في تطبيق جافا قد تحتاج فقط إلى استبدال ملف جرة أو حتى مجموعة فرعية من جرة المحتويات.سوف تحتاج أيضا إلى أن يكون وسيلة إلى التعرف على العميل الحالي وإصدار التحديث بشكل مناسب.أنا يمكن أن يذهب على وعلى, ولكن أتمنى أن أرى وجهة نظري حول التنوع.هذا هو واحد من تلك الأوقات أفضل إجابة عادة ما يبدأ مع "حسنا, هذا يعتمد ...!" هذا هو السبب في الكثير من الإجابات تشمل "يرجى الضيقة المعلمات."

نصائح أخرى

تأكد أيضا أن تنظر في الآثار الأمنية المترتبة على مص أسفل معلومات عن التحديث وكذلك تحديث الثنائيات أنفسهم.

هل كنت تثق في مصدر تحميل ؟ ربما روعه للمنزل حصلت على التحديث ، ولكن ماذا لو كان هناك رجل في منتصف الذين الموجهات إلى خادم الخبيثة.HTTPS أو مماثلة اتصال آمن ، فحص الأجزاء التي في نهاية المطاف تحميل باستخدام التحقق من التوقيع الرقمي هو الموصى بها.

أولا كنت في حاجة إلى ملف على التطبيق الخاص بك الرئيسية موقع على شبكة الإنترنت مع أحدث إصدار.أفضل طريقة أعتقد أن لدينا جدول SQL لهذه المهمة و ملء تلقائيا بعد نشر نسخة جديدة / ليلا بناء على الانتهاء.التطبيق الخاص بك بإنشاء موضوع جديد والذي يطلب المدمج في رابط http مع نسخة يقارن مع الحالي.في .صافي الاستخدام يمكن استخدام رمز مثل هذا:

Version GetLatestVersion() {
HttpWebRequestrequest = (HttpWebRequest)WebRequest.Create(new Uri(new Uri(http://example.net), "version.txt));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (request.HaveResponse)
{
  StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.Default);
  return new Version(stream.ReadLine());
}
else
{
  return null;
}
}

Version latest = GetLatestVersion();
Version current = new Version(Application.ProductVersion);
if (current < latest)
{
  // you need an update
}
else
{
  // you are up-to-date
}

في هذا المثال ، version.php في واحدة فقط من سلسلة عادي مثل 1.0.1.0.

آخر نصيحة أستطيع أن أعطي - كيفية تحميل التحديث.أنا أحب كثيرا فكرة القادمة:في موارد التطبيق الخاص بك هناك سلسلة من CLR-رمز تجميع على ذبابة (باستخدام CodeDom) إلى مجلد مؤقت, التطبيق الرئيسي المكالمات و يذهب إلى إغلاق.محدث يقرأ الحجج إعدادات التسجيل و تنزيل وحدات جديدة.ويدعو التطبيق الرئيسي الذي حذف جميع الملفات المؤقتة.فعلت!

(ولكن كل شيء هنا هو حول .صافي)

أبسط الحلول (المستخدمة من قبل العديد من البرامج) هو تشغيل برنامج إلغاء التثبيت عن النسخة السابقة و تشغيل المثبت على واحدة جديدة (اختياريا تخطي الأسئلة التي المستخدم قد أجبت على مثل EULA).الصيد الوحيد هو أن النسخة الجديدة يجب أن تكون قادرا على قراءة خيارات التكوين من الإصدار القديم.

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

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

بديل وأكثر تعقيدا حل هو إنشاء خدمة windows (أو unix الخفي) الذي يتحقق بشكل دوري لمعرفة ما إذا كان هناك تحديثات هذه الخدمة يمكن تحميل التحديث وتشغيل المثبت.

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

هذا ليس كثيرا إجابة كاملة ، ولكن بدلا من ذلك مثال واحد من التحديث التلقائي آلية وأنا نفذت في الآونة الأخيرة.الوضع مختلف قليلا عن التقاليد فايرفوكس-نوع التطبيق المستخدم ، لأنه كان أداة داخلية تستخدم في العمل.

أساسيا, انها قليلا السيناريو الذي يدير طابور من التخريب الفروع التي سيتم بناؤها وتعبئتها في المثبت.يقرأ قليلا الملف ، حيث أسماء فروع مكتوبة يأخذ أول واحد ، وإعادة يكتب في نهاية الملف و تطلق عملية البناء ، الذي ينطوي على استدعاء مجموعة من البرامج النصية.التكوين لكل فرع البناء هو مكتوب في .INI المخزنة في التخريب مستودع جنبا إلى جنب مع الأداة نفسها.

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

طريقة تنفيذها كانت بسيطة:عندما كنت إطلاق أداة, يصبح "الغلاف الخارجي".هذا الغلاف الخارجي لا 2 أشياء بسيطة جدا:

  • svn update على نفسها و على ملفات التكوين
  • إطلاق نفسها مرة أخرى, هذه المرة باسم "شل الداخلية" ، والذي يعالج واحدة التكوين (ثم يخرج مرة أخرى).

هذا بسيط جدا تحديث-نفسي-في حلقة النظام خدمنا جيدا لبضعة أشهر الآن.انها أنيقة جدا ، لأنه هو بذاته:auto-updater هو برنامج نفسها.لأن "الغلاف الخارجي" (auto-updater) الجزء هو بسيط جدا, لا يهم أنه لا تستفيد من التحديثات مثل "شل الداخلية" (الذي يعدم من تحديث الملف المصدر في كل مرة).

الشيء الوحيد الذي لم يتم ذكره هو أن عليك أن تنظر بجدية أن المستخدم تشغيل البرنامج الخاص بك قد لا يكون في الواقع الامتيازات الكافية لرفع مستواه.يجب أن يكون هذا شائع جدا على الأقل بالنسبة لمستخدمي الأعمال ، وربما أقل من ذلك بالنسبة للمستخدمين المنزليين.

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

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

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

واحدة من فكرة جميلة حقا هو ClickOnce توزيع .صافي انها المثبت الذي المرامل التطبيق الخاص بك وتثبيت في سياق المستخدم, لذلك لا حقوق المسؤول مطلوبة.يمكنك تكوين ClickOnce في نشر للتحقق من وجود تحديثات كل بدء التطبيق.

جافا جافا ويب ستارت التي تقدم نفس النوع من الوظائف على تطبيقات جافا.

دلفي لديه العديد من المقالات حول التحديث التلقائي, Torry لديه قائمة من WebUpdate مكونات, على سبيل المثال GoUpdater يبدو أن لديها مجموعة واسعة جدا من الوظائف.

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

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

الايجابيات:

  • دائما ما يصل إلى تاريخ

سلبيات:

  • كنت بحاجة إلى خادم التطبيق (هر ، جبوس) من أجل توزيع الملفات
  • تحتاج إلى اتصال بالإنترنت من أجل الحصول على التطبيق

قراءة كارل Seleborgs الجواب أعطاني بعض الأفكار كيف التعليمات البرمجية عام-مستودع يمكن أن تكون مفيدة.

إس يأتي مع أداة تسمى svnsync ، وهو نوع من يتصرف مثل إس التصدير ولكن بتتبع الفعلية مراجعة التصدير الخاصة بك في.

شخص يمكن استخدام هذا النظام من أجل فقط جلب الملفات التي تم تغييرها من المستخدمين الفعلية المراجعة.

في الواقع سيكون لديك مستودع مع الثنائيات تجميع و تشغيل svnsync سوف تجلب سوى الثنائيات التي تم تعديلها.قد تكون أيضا قادرة على دمج التغييرات المحلية إلى النص على أساس ملفات التكوين مع تكوين جديد-خيارات.

وظيفة تثبيت التصحيح البرنامج هو في الأساس واحدة من الوظائف الأساسية المثبت.مثبت البرنامج هو موثق في العديد من الأماكن ولكن عادة لكل المثبت أساس:هناك Microsoft Installer (مع درع تثبيت ملحقات) ، روبي الأحجار الكريمة, Java .جرة ملفات لينكس المختلفة حزمة إدارة أنظمة (دورة في الدقيقة, Apt-get)وغيرها.

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

يمكنك كتابة داخلي وحدة من التطبيق الخاص بك أن تفعل التحديثات.يمكنك كتابة خارجي البسيطة إلى التحديثات.

ننظر أيضا .صافي على ذبابة تجميع التكنولوجيا يجعل من الممكن إنشاء مثل هذه البسيطة التطبيق على ذبابة على الطلب.على سبيل المثال ، http://fly.sf.net/

أنا ذاهب لنفترض الجواب ويندوز.

بهذه الطريقة يبدو للعمل بشكل جيد.

في المثبت القيام به:
1.إنشاء دليل بدء الخدمة التي تدير LocalSystem أنه عندما بدأت هل التحديث ثم توقف.
2.تغيير أذونات الخدمات حتى يمكن لجميع المستخدمين تشغيل الخدمة (إذا كان كافة المستخدمين يجب أن تكون قادرا على تحديث w/o حقوق المشرف).
3.تغيير البرنامج الرئيسي إلى التحقق من وجود تحديثات عندما بدأت باستخدام آلية بسيطة.إذا كشف التحديث الفوري إذا كان المستخدم يريد تطبيقه.
4.إذا كان المستخدم يقبل التحديث بدء تشغيل الخدمة.

إذا كانت العمارة تسمح بذلك ، إنشاء وسيلة لرصد التحديث كما هو تشغيل.

إذا كان البرنامج مفتوح المصدر و الهدف لينكس أو المطورين.ومن المثير للاهتمام أن تثبيت البرنامج كما بوابة الريبو.وبعد ذلك سحب مستقرة فرع أحيانا أو في كل مرة عندما يتم إطلاقها.

هذا هو سهلة خاصة عند التطبيق الخاص بك تدار عبر الآلية, السبط, mavan, كومة, elm-حزمة أو على حد سواء.

إذا كنت تبحث عن البرنامج عبر منصة التحديث الحل ، نلقي نظرة على www.updatenode.com

بعض النقاط البارزة:

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

مجرد محاولة ذلك.

راجع للشغل, أنا جزء من فريق ديف مفتوحة المصدر العميل.:)

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