المزالق/المزالق الخاصة بنشر ClickOnce/smart-client في .NET [مغلق]

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

سؤال

لدي العديد من .NET نماذج ويندوز التطبيقات التي أستعد لتحويلها إلى ملف انقر مرة واحدة/ سيناريو نشر العميل الذكي.لقد قرأت البرامج التعليمية التي ليست رائعة، ولكن هل هناك مخاطر أو "مشاكل" يجب أن أكون على دراية بها؟

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

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

المحلول

فيما يلي بعض الأشياء التي أعرفها.

  1. لا يمكن وضع أيقونة على سطح المكتب. تستطيع الآن.

  2. لا أستطيع التثبيت لجميع المستخدمين.

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

  4. منذ .شبكة 3.5 SP1، لن تحتاج إلى التوقيع على بيان النشر بعد الآن مما يسهل نقل عمليات النشر إلى خوادم جديدة.

  5. لا أستطيع تثبيت التجميعات في GAC.يمكنك التغلب على ذلك عن طريق إنشاء حزم تثبيت منتظمة تعتبر متطلبات مسبقة لتطبيق ClickOnce.

نصائح أخرى

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

تمت معالجة معظم المشكلات ولكن ذكر العديد من الأشخاص عدم قدرتهم على إنشاء اختصار على سطح المكتب.في الواقع، أنت يستطيع أنشئ اختصارًا على سطح المكتب باستخدام Visual Studio 2008 SP1.

وأيضًا، إذا كنت لا تستخدم الإصدار الأحدث من Visual Studio، فيمكنك ذلك دائمًا اكتب رمزًا لإنشاء اختصار لاختصار قائمة البداية المثبتة.

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

لقد سمعت تذمرًا من مكان ما داخل شبكة الإنترنت مفاده أن الإصدار المستقبلي من ClickOnce سيزيل بعضًا من هذا الصداع.

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

إحدى عيوب ClickOnce هي حقيقة أنه لا يمكنك التثبيت على GAC.هذه مشكلة إذا كنت تريد تثبيت تطبيقات متعددة تشترك في ملفات DLL.سيتطلب كل تطبيق نسخة محلية من ملفات DLL.أيضًا، تم إيقاف عمليات تثبيت المستخدم المتعددة.يرى القائمة التي تقارن Window Installer بـ ClickOnce.

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

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

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

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

لقد مر وقت طويل أيضًا منذ أن استخدمته، ولكن هناك طريقة خاصة يمكنك استخدامها لمعرفة وعرض إصدار/رقم الإصدار ClickOnce، وهو منفصل عن رقم الإصدار/الإصدار الخاص بالتطبيق.يجب عليك إجراء محاولة/التقاط وإذا كان إصدار ClickOnce/رقم الإصدار يلقي استثناءً، فإن التطبيق لا يعمل كتطبيق ClickOnce-deployed (أي أنه يعمل كتطبيق مترجم بانتظام أو من Visual Studio).

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

سيكون لديك وصول أقل إلى النظام مقارنة بتطبيق .NET العادي.

وذلك لأنك ستحصل على مستوى ثقة أقل.المزيد عن ذلك في دليل مطور .NET Framework:انقر بمجرد النشر والأمن.

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

لم أكن أعلم أن SP1 يسمح لك بإنشاء رمز سطح المكتب.
وإليك كيف كنا نفعل ذلك (المعروف الآن باسم "الطريق الصعب"):

try
{
    string company = string.Empty;
    string product = string.Empty;
    if (Attribute.IsDefined(asm, typeof(AssemblyCompanyAttribute)))
    {
        AssemblyCompanyAttribute asCompany = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyCompanyAttribute));
        company = asCompany.Company;
    }
    if (Attribute.IsDefined(asm, typeof(AssemblyProductAttribute)))
    {
        AssemblyProductAttribute asProduct = (AssemblyProductAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyProductAttribute));
        product = asProduct.Product;
    }
    if (!string.IsNullOrEmpty(company) && !string.IsNullOrEmpty(product))
    {
        string desktopPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            product + ".appref-ms");
        string shortcutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs),
            Path.Combine(company, product + ".appref-ms"));
        File.Copy(shortcutPath, desktopPath, true);
    }
}
catch 
{
    // Shortcut could not be created
}

لا يمكنك التثبيت إذا كان العميل خلف وكيل يتطلب المصادقة.

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