ما هي أفضل طريقة لتطبيق winforms.NET لتحديث نفسه دون استخدام ClickOnce؟

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

سؤال

لأسباب فنية، لا يمكنني استخدام ClickOnce للتحديث التلقائي لتطبيق .NET الخاص بي وتجميعاته.ما هي أفضل طريقة للتعامل مع التحديث التلقائي في .NET؟

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

المحلول

اعتقد ان كتلة تطبيق التحديث كان بمثابة مقدمة لـ ClickOnce.قد يكون من المفيد التحقيق.قد يكون النظر إلى الكود المصدري الخاص به كافياً لإثارة بعض الأفكار.

نصائح أخرى

لدينا منتج تجاري/مفتوح المصدر: wyBuild & wyUpdate.لديه القدرة على الترقيع وهو سهل الاستخدام.

يحرر:لقد تم التصويت لصالح الأرقام السلبية، لكن منشوري لم يكن مجرد بيع صارخ.إن برنامج التحديث الخاص بنا، wyUpdate، مفتوح المصدر ومكتوب بلغة C# ومرخص بموجب ترخيص BSD.

اعتقدت أنه قد يساعد أي شخص يحاول إنشاء برنامج تحديث من البداية باستخدام إطار عمل .NET.

ولكن، التصويت لي إذا كان لا بد من ذلك.

منذ حوالي 3-4 سنوات، قمت بنشر مثال موجود خارج التطبيق، إذا تم اكتشاف تحديث، يقوم التطبيق باستدعاء المحدث ويتم إيقاف تشغيله، ثم تتم التحديثات، ويتم إعادة تشغيل التطبيق.

لقد قمت بنشر المثال على موقع GotDotNet القديم...سأحاول العثور عليه.

لقد عملت بشكل مثالي واستغرقت حوالي 1-2 ساعة للكتابة.

لدى Indigo Rose منتج يسمى التحديث الحقيقي وهذا أيضًا يفعل ذلك من أجلك.لقد استخدمتها في الماضي من التطبيقات المُدارة وغير المُدارة.إنه في الأساس ملف تضعه على الخادم الخاص بك (http، ftp، أي شيء تريده).ثم تقوم باستدعاء EXE من جانب العميل للتحقق من وجود تحديثات.يتم سحب ملف التحديثات وله منطق لاكتشاف الإصدار الموجود على العميل (اختيارك، واكتشاف DLL، وقراءات مفتاح التسجيل، وما إلى ذلك).ثم سيجد المحدث المناسب له ويقوم بتنزيل الملف للتنفيذ.إنه يعمل بشكل جيد من خلال الوكلاء أيضًا.

الشيء الوحيد الذي لا يفعلونه هو إنشاء التصحيحات لك.عليك أن تفعل ذلك يدويًا، أو باستخدام منتج آخر لديهم.إنه حل تجاري ويعمل بشكل جيد إذا كنت في حاجة إليه.

كنقطة بداية لبدء العمل بنفسك، ربما يكون الأمر يستحق النظر إليه مقالة Alex Feinman على MSDN بعنوان "إنشاء تطبيقات ذاتية التحديث باستخدام .NET Compact Framework".

اكتب الشى الذى تريده.

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

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

في ملف Program.cs الخاص بك، افعل شيئًا مثل هذا:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Update();
        Application.Run(new Form1());
    }

    private static void Update()
    {
        string mainFolder;
        string updateFolder;
        string backupFolder;

        foreach (string file in
            System.IO.Directory.GetFiles(updateFolder))
        {
            string newFile = file.Replace(
                updateFolder, mainFolder);

            if (System.IO.File.Exists(newFile))
            {
                System.IO.File.Replace(file, newFile, backupFolder);
            }
            else
            {
                System.IO.File.Move(file, newFile);
            }
        }
    }

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

في مشروع مضى عليه وقت طويل، وباستخدام .NET Compact Framework 1.0، قمت بكتابة تطبيق للتحديث التلقائي.استخدمنا ميزة نشر CAB الخاصة بـ SqlCE للحصول على الملفات على الجهاز (يمكنك استخدام Sync Framework الآن)، وكان لدينا ملف exe منفصل قام بتفريغ CAB وتحديث الملفات.

التحديث سيكون كالتالي:سيُطلب من المستخدم التحديث والنقر فوق الزر والانسحاب من تطبيق واجهة المستخدم.سيتولى برنامج التحديث exe المسؤولية، ويحصل على ملف cab من الخادم، وينسخ ملفات dll الحالية احتياطيًا، ويفك ضغط ملف cab باستخدام wceload.سيتم بعد ذلك إعادة تشغيل واجهة المستخدم، وإذا فشلت، فسيتم التراجع عن التحديث.لا يزال هذا السيناريو مثيرًا للاهتمام على الأجهزة صغيرة الحجم، ولكن هناك أدوات أفضل الآن من مجرد sqlce.

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

لقد كتبت برنامج التحديث التلقائي الخاص بي، ويستخدم برنامج التحديث التلقائي ملف تكوين شائعًا للتطبيق الذي يحتوي على عناوين URL لتنزيل أحدث الإصدارات من / التحقق مما إذا كان يحتاج إلى التحديث.

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

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