بسم الله الرحمن الرحيم
الإخوة الكرام أعضاء المنتدى ،، بعد التحية:
موضوع التحزيم أحد المواضيع المهمة، كما أنه الخطوة الأساسية التي يتم تنفيذها بعد الانتهاء من برمجة التطبيقات أو المكونات تمهيداً لتوزيعها على الجمهور، وبما أنه قد كثرت الأسئلة حول هذا الموضوع فقد حاولت أن أجمع المعلومات الأساسية عن ذلك ..
في البداية ومن خلال الـ Visual Studio .NET سنقوم بإنشاء مشروع جديد، ومن البديهي أن المشروع سيكون من نوع Setup and Deployment Projects والذي يعني أننا سنقوم بإنشاء مشروع خاص بتحزيم تطبيق أو مكون معين، ولو لاحظنا القوالب الموجودة في هذا النوع سنجد أن لدينا أربعة أنواع من برامج التحزيم، وهي كالتالي:
1. Setup Project : يقوم هذا النوع ببناء برامج تحزيم لتطبيقات الويندوز Windows Applications.
2. Web Setup Project : يقوم هذا النوع ببنا برامج تحزيم لتطبيقات الويب Web Applications.
3. Merge Module Project : يختص هذا النوع بتحزيم المكونات أو الملفات التي يتم مشاركتها بين أكثر من تطبيق، وينتج عن ذلك ملف من نوع msm يمكن تضمينه في أي نوع من برامج التحزيم الثلاثة الأخرى.
4. Cab Project : يقوم هذا النوع ببناء ملف مضغوط لتحزيم مكونات الـ ActiveX، والذي يتم وضعه على سيرفر ما Web Server مع إتاحة تحميله من المستعرض الخاص بالمستخدم Web Browser، ويكمن الفرق بين هذا النوع من والنوع الثاني Web Setu Project في المكان الذي يتم تحميل برنامج التحزيم من خلاله.
بالإضافة إلى ذلك سنجد الخيار Setup Wizard والذي يوفر معالج مساعد، يقوم بإعداد واختيار برنامج التحزيم المناسب على ضوء الإجابات التي يتلقاها من المصمم ( المبرمج ).
لاحظ الشاشة التالية
جدير بالذكر - وقبل الدخول في تفاصيل إنشاء هذه الأنواع الأربعة - أنه لا يلزم لتوزيع البرامج أن نقوم بإنشاء برنامج تحزيم من خلال الـ Visual Studio .NET - وإن كانت هذه هي الطريقة الأفضل لعملية التوزيع - حيث أنه يمكننا القيام بعملية التوزيع عن طريق استخدام النسخ اليدوي ( copy project أو Xcopy )، أو استخدام برامج تحزيم خاصة بشركات أخرى غير Microsoft.
سنبدأ الآن بالتحدث عن النوع الأول Setup Project والخاص ببناء برنامج تحزيم لتطبيق ويندوز Windows Application، والذي يقوم بإنتاج ملف من نوع msi يحتوي على التطبيق بالإضافة إلى كل الملفات المتعلقة به، كما أنه يحتوي على المعلومات الخاصة بعملية التحميل كإدخالات الريجستري التي يتم إضافتها مثلاً، وكل ذلك يتم دمجة في ملف واحد فيما يُسمى بتقنية Microsoft Windows Installer ..
تقوم هذه التقنية ( على جهاز العميل ) بالاحتفاظ بقاعدة بيانات تحتوي على المعلومات الخاصة بكل التطبيقات التي تم تثبيتها على الجهاز - كل على حدة -، وتحتوي هذه المعلومات على الملفات الخاصة بالتطبيق، والمفاتيح الخاصة به في الريجستري، بالإضافة إلى الأدوات التي يتم تثبيتها معه، وعندما تكون هناك حاجة إلى إزالة برنامج ما Uninstall فإن هذه التقنية تضمن القيام بذلك بشكل آمن بدون التأثير على التطبيقات الأخرى ومكوناتها ..
من نافذة New Project ومن خلال التفرع Setup and Deployment Projects سنقوم باختيار برنامج التحزيم Setup Project، ونقوم باختيار الاسم والمكان المناسب له، ثم OK
ستقوم بيئة الـ Visual Studio .NEt بإنشاء مشروع فارغ مجهز لتحزيم تطبيق موجه إلى نظام الويندوز Windows Application، وسنبدأ بإلقاء نظرة على مكونات هذا المشروع، وتحديداً نافذة الـ Solution Explorer
في أعلى الـ Solution Explorer سنجد سبع أيقونات صغيرة، هذه الأيقونات هي أهم ما لدينا في عملية إنشاء برنامج التحزيم حيث أنها تحتوي على الخطوات الكاملة لإنشاء برنامج تحزيم مثالي، فيما يلي سنسرد هذه الخطوات ثم نناقشها - كل على حدة -:
1. File System Editor
2. Registry Editor
3. File Types Editor
4. User Interface Editor
5. Costum Actions Editor
6. Launch Conditions Editor
7. Properties
الخطوة الأولى: إعداد الملفات الخاصة بالتطبيق
قبل كل شيء سنحدد لبرنامج التحزيم الملفات التي سيتم تحميلها عند المستخدم، ولذلك سنذهب إلى الـ File System Editor ويمكن الوصول إليه من خلال الأيقونة الأولى في نافذة الـ Solution Explorer كما ذكرت سابقاً.
سنجد أن الـ File System Editor مصمم على شكل مستعرض أو مستكشف الويندوز Windows Explorer، حيث نجد في الجانب الأيسر المجلدات الرئيسية التي سيتم التحميل إليها، وفي الجانب الأيمن الملفات التي سيتم إضافتها بداخل هذه المجلدات.
لاحظ الصورة التالية:
تقوم بيئة الـ Visual Studio .NET افتراضياً بإضافة ثلاث مجلدات رئيسية في الجانب الأيسر، وهي:
Application Folder ويحتوي على الملفات التي سيتم إضافتها إلى المجلد الخاص بالتطبيق في جهاز العميل
User's Desktop ويحتوي على الملفات التي سيتم إضافتها إلى الـ Desktop ( سطح المكتب ) الخاص بالمستخدم
User's Programs Menu ويحتوي على الملفات التي سيتم إضافتها إلى قائمة Start ( ابدأ ) في جهاز المستخدم
وغالباً ما تقتصر الإضافة في المجلدين الأخيرين على الاختصارات Shortcuts فقط.
من الممكن إضافة مجلدات أخرى إلى هذه المجلدات، على سبيل المثال يمكن إضافة مجلد لتحميل الملفات إلى مجلدات الـ System أو الـ Fonts أو الـ Favorites الخاصة بالنظام، وذلك عن طريق النقر بزر الماوس الأيمن في الجانب الأيسر من نافذة الـ File System Editor واختيار Add Special Folder ..
أما في الجانب الأيمن من نافذة الـ File System Editor فإنه يتم إضافة المحتوى الخاص بهذه المجلدات سواء كانت هذه المحتويات عبارة عن مجلدات فرعية، أو ملفات، أو اختصارات، او مكتبات تجميع Assemblies، وذلك عن طريق النقر بزر الماوس الأيمن ثم الاختيار المناسب ..
الخطوة الثانية: إعداد الإدخالات الخاصة بالتطبيق في الـ Registry ( مسجل النظام ):
يعتبر الـ Registry أحد الأدوات الهامة للمبرمج، والذي يمكن أن يمثل أداة لتخزين قيم أو إعدادات معينة حسب الحاجة إليها ..
تتيح بيئة الـ Visual Studio .NET ومن خلال برنامج التحزيم القيام بإضافة القيم التي تريدها إلى الريجستري وذلك في المكان المخصص للتطبيق، حيث يتم إتاحة مفتاحين فرعيين بداخل المسارين التاليين: HKCU\Software و HKLM\Software، ويمكنك اختيار الأسماء المناسبة لهما، ثم بعد ذلك يمكنك إضافة القيم إلى هذه المفاتيح من خلال الجانب الأيمن وزر الماوس الأيمن :D
لاحظ الصورة التالية
جدير بالذكر أنه لا يمكنك التعديل على قيم الريجستري الموجودة مسبقاً والخاصة بالنظام والتطبيقات الأخرى، حيث لا يمكن الوصول إليها من هنا، وإنما يلزمك كتابة الكود الخاص بالتعامل مع الريجستري، والوصول إلى هذه القيم من خلال التطبيق الخاص بك ..
الخطوة الثالثة: تعريف أنواع الملفات الخاصة بالتطبيق
المقصود بأنواع المفات هنا الـ Extension ( الامتداد ) الخاص بها، كما هو الحال بالنسبة لملفات الـ Microsoft WinWord مثلاً فهي تأخذ الامتداد DOC، وهي مرتبطة ببرنامج الـ Word، فعندما يتم النقر على أحد هذه الملفات مرتين فإنه يتم تشغيل برنامج الـ Word وفتح الملف، وكذلك هو الحال بالنسبة لملفات الـ TXT وبرنامج الـ Notepad، وملفات الـ RTF وبرنامج الـ Wordpad ... الخ
هل تريد أنت أيضاً أن يكون لتطبيقك ملفات من نوع معين مرتبطة به بهذا الشكل، الأمر أبسط مما تتصور، فبعد أن كان ذلك يتطلب كوداً معقداً في الإصدارات الأقدم فإن الأمر لا يتعدى نقرة بالماوس في بيئة الـ Visual Studio .NET ..
من نافذة الـ File Types Editor سنقوم بالنقر بزر الماوس الأيمن واختيار Add File Type، ثم نقوم باختيار اسم تعريفي لملفات النوع الجديد الذي سنضيفه، وبعد ذلك من نافذة الخصائص سيكون علينا تعديل الخاصية Extension إلى نوع الملف الذي نريد تخصيصه للتطبيق الخاص بنا، ويجب أيضاً تعديل الخاصية Command لتحديد مسار التطبيق المرتبط، والذي سيتم تشغيله عند محاولة تشغيل الملف ..
لاحظ أن هناك بند فرعي بالاسم Open وهو يمثل الإجراء الذي سيتم اتخاذه بعد فتح البرنامج المرتبط، ومن الطبيعي أن الإجراء الافتراضي سيكون هو فتح الملف الذي من خلاله تم تشغيل البرنامج، ويمكن تغيير هذا الإجراء أو إضافة أي إجراءات أخرى حسب الرغبة ..
الخطوة الرابعة: تصميم واجهات المستخدم
والمقصود بواجهات المستخدم هنا هي مربعات الحوار التي تظهر للمستخدم أثناء عملية تحميل التطبيق، ونستطيع الوصول إلى مربعات الحوار هذه والتعديل عليها عن طريق نافذة الـ User Interfaces Editor، وكما نرى فهي تنقسم إلى قسمين:
القسم الأول Install : وهو خاص بمربعات الحوار التي ستظهر للمستخدم أثناء عملية تحميل التطبيق.
القسم الثاني Administrative Install : وهو خاص بمربعات الحوار التي ستظهر عندما يقوم مدير النظام برفع برنامج التحزيم إلى مكان ما في شبكة Network، والذي يتم الوصول إليه عن طريق تمرير a/ إلى ملف التثبيت أثناء تشغيله ..
تقوم بيئة الـ Visual Studio .NET تلقائياً بإضافة خمس مربعات حوار افتراضية هي:
مربع الحوار Welcome للترحيب بالمستخدم وتقديم نبذة عن التطبيق
مربع الحوار Installation Folder لتمكين المستخدم من اختيار المجلد الذي سيتم نسخ التطبيق إليه
مربع الحوار Confirm Installation للتأكيد على استمرار عملية التثبيت
مربع الحوار Progress لإظهار حالة تحميل الملفات إلى جهاز المستخدم
مربع الحوار Finished لإنهاء برنامج التحزيم
لاحظ أنه يمكنك التحكم في الصور والكلمات المعروضة في هذه المربعات عن طريق نافذة الـ Properties ( الخصائص )
لاحظ أيضاً أن هذه المربعات الحوارية ليست إلزامية، أي أنه يمكن الاستغناء عن بعضها والاستعانة بغيرها، فعن طريق الزر Delete يمكن حذف أي منها، كما أنه يمكن إضافة مربع حواري جديد عن طريق النقر بزر الماوس الأيمن كما يظهر في الصورة السابقة، ثم اختيار Add Dialog ليظهر لنا النموذج التالي:
هذا النموذج يحتوي على العديد من مربعات الحوار التي يمكن الاستعانة بأي منها، وعلى حسب مربع الحوار الذي يتم إضافته فإن مربع الخصائص Properties يختلف ليضيف خاصية جديدة، أو يلغي أخرى، على سبيل المثال عند إضافة مربع الحوار License Agreement فإنه يلزم إعداد الخاصية LicenseFile وهي تستقبل ملف نصي من نوع RTF يحتوي على نص اتفاقية الترخيص، وعند إضافة مربع الحوار Register User فإنه يلزم إعداد الخاصية Executable وهي تستقبل ملف تنفيذي من نوع EXE يحتوي على البرنامج الخاص بتسجيل النسخة من التطبيق ، وهكذا الحال بالنسبة لمربعات الحوار الأخرى ...
الخطوة الخامسة: تنفيذ إجراءات معينة بعد إتمام عملية التحميل
إحدى المميزات الجميلة الموجودة في برامج التحزيم المنشأة في بيئة الـ Visual Studio .NET أنها تسمح لك بتشغيل كود معين بعد إتمام عملية التثبيت، وهو ما يُسمى بالـ Custom Action، وتظهر فائدة هذه الميزة في القيام بالعمليات التي لا يمكن لبرنامج التحزيم أن يقوم بها بنفسه، فربما تكون بحاجة إلى إنشاء قاعدة بيانات أثناء عملية تثبيت التطبيق مثلاً، وهو ما لا يمكنك عمله بواسطة برنامج التحزيم، ولكن من الممكن إضافة Custom Action معين يقوم بهذه العملية، ويتم اعتباره كجزء لا يتجزأ من عملية التثبيت بحيث إذا فشل تنفيذه يتم إزالة التطبيق تلقائياً ..
يتم إضافة الـ Custom Action من خلال نافذة الـ Custom Actions Editor، وتحتوي هذه النافذة على أربع مجلدات يمكن الإضافة إليها، وهي على التوالي Install ثم Commit ثم Rollback ثم Uninstall ..
ويمثل كل واحد من هذه الأربعة التوقيت الذي سيتم فيه تنفيذ الإجراء، وما إذا كان سيتم تنفيذه أثناء التثبيت أو بعده أو في حال فشل التثبيت أو في حال إلغاء التثبيت .. وهكذا
أبسط مثال لذلك أن نقوم بكتابة كود يقوم بإنشاء قاعدة بيانات، ونضعه في ملف تنفيذي، ثم نقوم بإضافته كـ Custom Action يتم تنفيذه بعد تثبيت البرنامج ..
كما نعلم فإنه يتم تنفيذ الإجراء بعد الانتهاء من عملية تثبيت البرنامج، وبالتالي فإنه لا يتمكن من الوصول إلى العمليات التي قام بها المستخدم أثناء عملية التثبيت، وكحل لذلك يمكن تمرير البيانات من برنامج التحزيم إلى الإجراء عن طريق الخاصية CustomActionData ..
من الممكن أيضاً إضافة شرط معين يجب تحققه لتنفيذ الإجراء عن طريق الخاصية Condition، وذلك للإجراءات التي يتم تنفيذها في حالات معينة، وأبسط مثال لذلك إجراء يتم تنفيذه في حال كون إصدارة النظام Windows9x، ولكن لا يتم تنفيذه مع الإصدارات الأحدث ... وهكذا
الخطوة السادسة: التحقق من شرط معين
أحد المزايا المهمة الموجودة في برامج التحزيم التي نقوم بإنشائها في بيئة الـ Visual Studio .NET، وهي إمكانية التحقق من شرط معين قبل التثبيت، وعلى أساس هذا الشرط يتم تحديد الموقف من إتمام التثبيت أو إلغائه ..
سنقوم بالتوجه إلى نافذة الـ Launch Conditions Editor.. نلاحظ في الجزء الأيسر من الصورة أنه يوجد قسمين:
- القسم الأول هو Search Target Machine
- القسم الثاني هو Launch Conditions
يوجد خمسة أنواع من الشروط التي يمكن التحقق منها وهي كالتالي:
1. التحقق من وجود ملف معين:
ومن خلاله نقوم بالتحقق من وجود ملف معين في جهاز المستخدم، ولذلك نقوم بإضافة باحث يقوم بالبحث عن الملف وذلك عن طريق النقر بزر الماوس الأيمن على القسم الأول المذكور سابقاً ثم اختيار Add File Search، نقوم بعدها باختيار الاسم المناسب لهذا الباحث، ثم نقوم بإعداد الخصائص اللازمة لهذا الباحث من نافذة الخصائص، وأهمها خاصية FileName والتي تحتوي على اسم الملف المراد البحث عنه، وخاصية Folder وهي عبارة عن المجلد الذي سيتم البحث بداخله، وخاصية Depth والتي تحدد مستوى البحث بالمجلدات الفرعية بداخل المجلد الذي سيتم البحث بداخله، والخاصية Property والتي تحوي اسماً تعريفياً يتم من خلاله الربط بالـ Launch Condition الذي سيتم إضافته في القسم الثاني، بالإضافة إلى بعض الخصائص الأخرى التي تساعد في تسهيل مهمة البحث عن الملف ..
بعد الانتهاء من إعداد الخصائص الخاصة بالباحث نقوم بإضافة Launch Condition في القسم الثاني، ونقوم بربطه بالباحث عن طريق الخاصية Condition والتي تحتوي على قائمة منسدلة بجميع البواحث الموجودة في برنامج التحزيم، ثم نقوم بإعداد الخاصية Message والتي تظهر للمستخدم في حال عدم تحقق الشرط، والخاصية InstallUrl والتي تقوم بتوجيهك إلى صفحة ويب خاصة بتحميل الملف الذي لم يتم إيجاده، ويمكنك تحديد هذه الصفحة أو تركها فارغة.
2. التحقق من قيمة معينة في الريجستري:
لا يختلف الأمر كثيراً عن سابقه، فسنقوم بإضافة باحث للتحقق من قيمة معينة في الريجستري، ويمكن الاختلاف في الخصائص حيث أن الخاصية Root تحتوي على الجذر الخاص بمدخل القيمة، ثم الخاصية RegKey والذي تحتوي على مسار المفتاح الذي يحوي مدخل القيمة المراد التحقق من قيمته، وأخيراً الخاصية Value وتحتوي على اسم مدخل القيمة المراد التحقق من قميته ..
بنفس الطريقة السابقة يتم إضافة Launch Condition في القسم الثاني، وإعداد الخاصية Condition للتحقق من وجود قيمة معينة في المدخل الذي تمت الإشارة إليه..
3. التحقق من وجود برنامج الـ Windows Installer:
وكما هو الحال بالنسبة لما سبق يتم إضافة باحث للتحقق من وجود برنامج الـ Windows Installer والذي يتم الاعتماد عليه أثناء عملية التثبيت، ومن حسن الحظ أنه يمكنك من خلال إضافة Launch Condition في القسم الثاني، ثم ربطه بالباحث، وإعداد الخاصية InstallUrl، أن تقوم بتحديد مسار معين لتحميل هذا البرنامج في حال عدم تواجده ..
4. التحقق من وجود مكتبة الـ NET Framwork.:
ويبدو هذا الشرط غاية في الأهمية حيث أنه لابد من وجود مكتبة الـ NET Frmaework. لتشغيل أي تطبيق يتم تصميمه بواسطة الـ Visual Studio .NET ومن هنا تكمن أهمية وجود هذه المكتبة لأنه من دونها لن تكون هناك فائدة لتثبيت البرنامج لأنه لن يعمل ..
يتم إنشاء هذا الشرط من خلال القسم الثاني Launch Conditions، ومن خلال الخاصية InstallUrl يتم تحديد موقع الملف dotnetfx.exe الخاص بتثبيت مكتبة الـ NET Frmaework. لكي يتم تشغيله في حال عدم وجود هذه المكتبة في جهاز المستخدم
5. التحقق من تثبيت الـ IIS - Internet Information Services:
بنفس الطريقة السابقة يمكننا التحقق من وجود الـ IIS مثبتاً في جهاز المستخدم، وفي حال عدم تواجده يتم إظهار رسالة معينة واتخاذ الإجراء المناسب.
أضف إلى هذه الشروط السابقة ما قد يقوم المستخدم بإضافته من الشروط، على سبيل المثال من الممكن التحقق من وجود الإصدارة الجديدة من الـ Microsoft Data Access Components أو MDAC عن طريق إضافة باحث للتحقق من قيمة معينة في الريجستري، وإعداد الخصائص التالية:
Root = vsdrrHKLM
RegKey = Software\Microsoft\DataAccess
Value = FullInstallVer
Property = MDACSEARCH
ثم نقوم بإضافة Launch Condition وربطه بالباحث السابق عن طريق إعداد الخاصية Condition لكي تصبح "MDACSEARCH>="2.7، وكما هو واضح فهي تتحقق من أن إصدارة الـ MDAC هي الإصدارة 2.7 أو الأحدث ..
في خاصية الـ Message يمكنك إضافة الرسالة التالية:
MDAC version 2.7 or higher must be installed prior to installing this application. You can install MDAC from the Microsoft Web site http://www.microsoft.com
أو أي رسالة أخرى تراها مناسبة ..
الخطوة السابعة والأخيرة: الخصائص العامة
ويمكن الوصول إليها من قائمة Project ثم Properties لتظهر لنا نافذة الخصائص والتي لا تحتوي على الكثير من التعقيد، ويمكن فهمها بكل بساطة ..
في الـ Output file name يتم تحديد المجلد الذي سيتم إنشاء برنامج التحزيم بداخله ..
في الـ Package files يتم تحديد نوعية ملفات برنامج التحزيم وما إذا كانت ملفاً واحداً بالامتداد msi، مع إمكانية جعله من نوع CAB وتقسيمه بحجم معين ..
في الـ Compression يتم تحديد تقنية الضغط، وتحديد الأولوية بين الحجم وسرعة التثبيت بالنسبة لبرنامج التحزيم ..
بذلك نكون قد انتهينا من الحديث عن النوع الأول وهو Setup Project، ولا يختلف الأمر كثيراً بالنسبة للأنواع الأخرى حيث يمكنكم اكتشاف الفروق ببساطة ..
أتمنى لكم الاستفادة
مع تحياتي وتمنياتي بالتوفيق

