تلقائيا التحقق من وجود نسخة جديدة من التطبيق

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

المشكلة هي أن ليس لدي أي فكرة حول ما يتعين القيام به من جانب الخادم.

يمكنني ان اتصور ان طلبي (يعدون في C++ باستخدام Qt) إلى إرسال طلب (HTTP ?) إلى الخادم ، ولكن ما هو ذاهب للرد على هذا الطلب ؟ من أجل الذهاب من خلال الجدران النارية, اعتقد انني سوف تضطر إلى استخدام المنفذ 80 ?هل هذا صحيح ؟

أو مثل هذه الميزة ، هل يجب أن نسأل شبكتنا الادارة لفتح منفذ محدد عدد من خلالها سوف التواصل ؟


@pilif :شكرا على إجابة مفصلة.لا يزال هناك شيء غير واضح بالنسبة لي :

مثل

http://www.example.com/update?version=1.2.4

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

كيف يمكنني العودة شيئا ؟ سيكون php أو asp (لا أعرف شيئا عن PHP أو ASP أعترف) ?كيف يمكنني فك ?version=1.2.4 جزء من أجل العودة إلى شيء تبعا لذلك ؟

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

المحلول

أود أن أوصى تماما فقط لا عادي طلب HTTP إلى موقع الويب الخاص بك.كل شيء آخر لا بد أن تفشل.

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

مثل

http://www.example.com/update?version=1.2.4

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

لماذا لا مجرد وضع ملف ثابت مع أحدث نسخة على الخادم و السماح للعميل أن تقرر ؟ لأنك قد تريد (أو حاجة) إلى السيطرة على العملية.ربما 1.2 لن تكون متوافقة مع الخادم في المستقبل ، إذا كنت تريد الخادم إلى القوة التحديث 1.3 ، ولكن التحديث من 1.2.4 إلى 1.2.6 يمكن أن يكون دون تمحيص ، لذلك قد ترغب في تقديم العميل مع تحديث اختياري.

أو كنت تريد أن يكون انهيار على قاعدة مثبتة.

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

يتحدث هنا مع قليل من الخبرة في هذا المجال, وهنا صغيرة معاينة ما يمكن (وسوف - ثق بي) تذهب الخطأ:

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

وذلك للحفاظ على الضرر منخفضة قدر الإمكان ،

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

ليس من الممتع أن تفعل ما كنت على وشك القيام به - لا سيما عند التعامل مع غير من الناحية الفنية يميل المستخدمين كما كان لي مرات عديدة.

نصائح أخرى

Pilif الجواب كان جيد و لدي الكثير من الخبرة مع هذا أيضا ، ولكن أود أن أضيف شيئا آخر:

تذكر أنه إذا كنت تبدأ yourapp.exe ثم "محدث" محاولة الكتابة yourapp.exe مع أحدث إصدار.اعتمادا على نظام التشغيل الخاص بك و بيئة البرمجة (كنت قد ذكرت C++/QT, لدي خبرة مع هؤلاء) ، سوف لا تكون قادرة على الكتابة yourapp.exe لأنه سيكون في الاستخدام.

ما قمت به هو إنشاء قاذفة.لدي MyAppLauncher.exe يستخدم ملف (xml بسيطة جدا) لإطلاق "الحقيقي exe".أن النسخة الجديدة موجودة ، قاذفة يمكن تحديث "الحقيقي exe" لأنه ليس في استخدامها ثم إطلاق النسخة الجديدة.

فقط الحفاظ على ذلك في الاعتبار و سوف تكون آمنة.

مارتن ،

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

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

التحديث من تشغيل تثبيت الحمولة في الأصل دليل التثبيت وإعادة تشغيل (أمل تحديث) التطبيق.

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

في php, الشيء السهل:

<?php
    if (version_compare($_GET['version'], "1.4.0") < 0){
        echo "http://www.example.com/update.exe";
    }else{
        echo "no update";
    }
?>

إذا كان الحال هل يمكن تمديد هذا حتى تتوفر حاليا نسخة غير مضمنة داخل النص, ولكن هذا هو فقط توضيح نقطة.

في التطبيق الخاص بك سيكون لديك هذه البرمجية الزائفة:

result = makeHTTPRequest("http://www.example.com/update?version=" + getExeVersion());
if result != "no update" then
    updater = downloadUpdater(result);
    ShellExecute(updater);
    ExitApplication;
end;

لا تتردد تمديد "بروتوكول" عن طريق تحديد شيء PHP النصي يمكن العودة إلى إخبار العميل سواء كان هاما ، إلزامية تحديث أم لا.

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

الاحتمالات الخاصة بك تماما لا حدود لها.

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

أنا أتفق مع @مارتن @Pilif الجواب ، ولكن إضافة ؛

النظر في السماح للمستخدمين النهائيين أن يقرروا ما إذا كانوا يريدون فعلا تثبيت التحديث هناك وبعد ذلك ، أو تأخير تثبيت التحديث حتى يتم الانتهاء من استخدام البرنامج.

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

كان لدينا ملحمة نظام تشغيل في حوالي 400 محل في البداية كنا نظن أنه سيكون من الرائع أن يكون البرنامج بقعة التحديثات وتنزيلها (باستخدام ملفات تحتوي على رقم إصدار مشابهة جدا اقتراحات لديك أعلاه)...فكرة عظيمة.حتى كل من المحلات التجارية بدأت نظمها في حول نفس الوقت (8:45-8:50) ، خادمنا ضرب تخدم 20+Mb تحميل 400 الملقمات البعيدة ثم تحديث البرمجيات المحلية و يسبب إعادة تشغيل.الفوضى - مع أحد قادرا على التجارة لمدة 10 دقائق.

وغني عن القول أن هذا تسبب لنا في وقت لاحق إيقاف 'التحقق من وجود تحديثات' ميزة تصميم للسماح المحلات التجارية إلى تأخير التحديث حتى في وقت لاحق اليوم.:-)

تحرير:وإذا كان أي شخص من أدوبي القراءة في سبيل الله لماذا اللعنة acrobat reader الإصرار على محاولة تحميل التحديثات و حماقة عندما أريد فقط أن النار لها متابعة قراءة الوثيقة ؟ أليس بطيئا في البداية ، المتضخمة بما فيه الكفاية ، كما هو, دون إضاعة مزيد من 20-30 ثانية من حياتي أبحث عن التحديثات في كل مرة كنت ترغب في قراءة PDF ؟
لا يستخدمون البرمجيات الخاصة بها??!!! :-)

على الملقم الذي يمكن أن يكون مجرد ملف بسيط "latestversion.txt" الذي يحتوي على رقم الإصدار (وربما تحميل URL) من أحدث إصدار.العميل ثم تحتاج فقط إلى قراءة هذا الملف باستخدام بسيط طلب HTTP (نعم ، إلى المنفذ 80) لاسترداد http://your.web.site/latestversion.txt, والتي يمكنك ثم تحليل للحصول على رقم الإصدار.هذه الطريقة لا تحتاج أي يتوهم رمز الملقم --- تحتاج فقط إلى إضافة ملف بسيط على موقع الويب الخاص بك القائمة.

إذا كنت الحفاظ على الملفات الخاصة بك في تحديث دليل على example.com هذا البرنامج النصي PHP يجب تحميل لهم بالنسبة لك نظرا طلب المذكورة سابقا.(التحديث سيكون yourprogram.1.2.4.exe

$version = $_GET['version'];    
$filename = "yourprogram" . $version . ".exe";
$filesize = filesize($filename);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: post-check=0, pre-check=0");
header("Content-type: application-download");
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . basename($filename).'"');
header("Content-Transfer-Encoding: binary");

وهذا يجعل متصفح الويب الخاص بك أعتقد أنه من تحميل التطبيق.

أبسط طريقة لتحقيق ذلك هو أن النار طلب HTTP باستخدام مكتبة مثل libcurl وجعلها تحميل ini أو ملف xml الذي يحتوي على النسخة الإلكترونية وأين نسخة جديدة ستكون متاحة على الانترنت.

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

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

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

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

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

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

أساسا كنت فقط بحاجة بسيطة تحميل وظائف.

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

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

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