الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحزيم التطبيقات ( تمهيداً لتوزيعها )

رائج
بدأه عبد الله فتحي في 13 سبتمبر 2005 · 30 رد · 29,236 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

الإخوة الكرام أعضاء المنتدى ،، بعد التحية:

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

في البداية ومن خلال الـ 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 والذي يوفر معالج مساعد، يقوم بإعداد واختيار برنامج التحزيم المناسب على ضوء الإجابات التي يتلقاها من المصمم ( المبرمج ).

لاحظ الشاشة التالية

07_09_05_04_09_21_1126091361afr_setup1.JPG

جدير بالذكر - وقبل الدخول في تفاصيل إنشاء هذه الأنواع الأربعة - أنه لا يلزم لتوزيع البرامج أن نقوم بإنشاء برنامج تحزيم من خلال الـ 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

07_09_05_04_10_56_1126091456afr_setup_.JPG

في أعلى الـ 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، حيث نجد في الجانب الأيسر المجلدات الرئيسية التي سيتم التحميل إليها، وفي الجانب الأيمن الملفات التي سيتم إضافتها بداخل هذه المجلدات.

لاحظ الصورة التالية:

07_09_05_04_11_19_1126091479afr_setup3.JPG

تقوم بيئة الـ 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

لاحظ الصورة التالية

07_09_05_04_11_55_1126091515afr_setup4.JPG

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

الخطوة الثالثة: تعريف أنواع الملفات الخاصة بالتطبيق

المقصود بأنواع المفات هنا الـ Extension ( الامتداد ) الخاص بها، كما هو الحال بالنسبة لملفات الـ Microsoft WinWord مثلاً فهي تأخذ الامتداد DOC، وهي مرتبطة ببرنامج الـ Word، فعندما يتم النقر على أحد هذه الملفات مرتين فإنه يتم تشغيل برنامج الـ Word وفتح الملف، وكذلك هو الحال بالنسبة لملفات الـ TXT وبرنامج الـ Notepad، وملفات الـ RTF وبرنامج الـ Wordpad ... الخ

هل تريد أنت أيضاً أن يكون لتطبيقك ملفات من نوع معين مرتبطة به بهذا الشكل، الأمر أبسط مما تتصور، فبعد أن كان ذلك يتطلب كوداً معقداً في الإصدارات الأقدم فإن الأمر لا يتعدى نقرة بالماوس في بيئة الـ Visual Studio .NET ..

من نافذة الـ File Types Editor سنقوم بالنقر بزر الماوس الأيمن واختيار Add File Type، ثم نقوم باختيار اسم تعريفي لملفات النوع الجديد الذي سنضيفه، وبعد ذلك من نافذة الخصائص سيكون علينا تعديل الخاصية Extension إلى نوع الملف الذي نريد تخصيصه للتطبيق الخاص بنا، ويجب أيضاً تعديل الخاصية Command لتحديد مسار التطبيق المرتبط، والذي سيتم تشغيله عند محاولة تشغيل الملف ..

07_09_05_05_12_49_1126095169afr_setup5.JPG

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

الخطوة الرابعة: تصميم واجهات المستخدم

والمقصود بواجهات المستخدم هنا هي مربعات الحوار التي تظهر للمستخدم أثناء عملية تحميل التطبيق، ونستطيع الوصول إلى مربعات الحوار هذه والتعديل عليها عن طريق نافذة الـ User Interfaces Editor، وكما نرى فهي تنقسم إلى قسمين:

القسم الأول Install : وهو خاص بمربعات الحوار التي ستظهر للمستخدم أثناء عملية تحميل التطبيق.

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

07_09_05_06_44_27_1126100667afr_setup6.JPG

تقوم بيئة الـ Visual Studio .NET تلقائياً بإضافة خمس مربعات حوار افتراضية هي:

مربع الحوار Welcome للترحيب بالمستخدم وتقديم نبذة عن التطبيق

مربع الحوار Installation Folder لتمكين المستخدم من اختيار المجلد الذي سيتم نسخ التطبيق إليه

مربع الحوار Confirm Installation للتأكيد على استمرار عملية التثبيت

مربع الحوار Progress لإظهار حالة تحميل الملفات إلى جهاز المستخدم

مربع الحوار Finished لإنهاء برنامج التحزيم

لاحظ أنه يمكنك التحكم في الصور والكلمات المعروضة في هذه المربعات عن طريق نافذة الـ Properties ( الخصائص )

لاحظ أيضاً أن هذه المربعات الحوارية ليست إلزامية، أي أنه يمكن الاستغناء عن بعضها والاستعانة بغيرها، فعن طريق الزر Delete يمكن حذف أي منها، كما أنه يمكن إضافة مربع حواري جديد عن طريق النقر بزر الماوس الأيمن كما يظهر في الصورة السابقة، ثم اختيار Add Dialog ليظهر لنا النموذج التالي:

07_09_05_06_44_43_1126100683afr_setup7.JPG

هذا النموذج يحتوي على العديد من مربعات الحوار التي يمكن الاستعانة بأي منها، وعلى حسب مربع الحوار الذي يتم إضافته فإن مربع الخصائص 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 ..

12_09_05_01_56_02_1126515362afr_setup8.JPG

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

أبسط مثال لذلك أن نقوم بكتابة كود يقوم بإنشاء قاعدة بيانات، ونضعه في ملف تنفيذي، ثم نقوم بإضافته كـ Custom Action يتم تنفيذه بعد تثبيت البرنامج ..

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

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

الخطوة السادسة: التحقق من شرط معين

أحد المزايا المهمة الموجودة في برامج التحزيم التي نقوم بإنشائها في بيئة الـ Visual Studio .NET، وهي إمكانية التحقق من شرط معين قبل التثبيت، وعلى أساس هذا الشرط يتم تحديد الموقف من إتمام التثبيت أو إلغائه ..

سنقوم بالتوجه إلى نافذة الـ Launch Conditions Editor.. نلاحظ في الجزء الأيسر من الصورة أنه يوجد قسمين:

- القسم الأول هو Search Target Machine

- القسم الثاني هو Launch Conditions

11_09_05_05_11_48_1126483908afr_setup9.JPG

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

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 لتظهر لنا نافذة الخصائص والتي لا تحتوي على الكثير من التعقيد، ويمكن فهمها بكل بساطة ..

12_09_05_01_48_13_1126514893afr_setup1_.JPG

في الـ Output file name يتم تحديد المجلد الذي سيتم إنشاء برنامج التحزيم بداخله ..

في الـ Package files يتم تحديد نوعية ملفات برنامج التحزيم وما إذا كانت ملفاً واحداً بالامتداد msi، مع إمكانية جعله من نوع CAB وتقسيمه بحجم معين ..

في الـ Compression يتم تحديد تقنية الضغط، وتحديد الأولوية بين الحجم وسرعة التثبيت بالنسبة لبرنامج التحزيم ..

بذلك نكون قد انتهينا من الحديث عن النوع الأول وهو Setup Project، ولا يختلف الأمر كثيراً بالنسبة للأنواع الأخرى حيث يمكنكم اكتشاف الفروق ببساطة ..

أتمنى لكم الاستفادة

مع تحياتي وتمنياتي بالتوفيق

ani.gif
#2

اخى العزيز

عندما اقوم بتصميم مشروع Setup واضيف Launch Condition لاتأكد من وجود ملف dotNet Framework لا توجد خاصية اسمها InstallUrl فى الـ Condition التى اضيفها

#4

الخاصية دى موجوده فى مشروع Web Application وليس Windows Application

#5

بالفعل أخي أحمد كلامك صحيح تماماً وهي تظهر في تحزيم الـ Web Application

وتختفي في تحزيم الـ Windows Application ولكن ما زال بالإمكان توجيه رسالة للمستخدم بتحميل مكتبة الـ NET FrmaeWork. والخروج من برنامج التحزيم

طبعاً من الأفضل البدء بتحميل المكتبة تلقائياً في حال عدم تواجدها .. وأعتقد أن هناك طريقة لذلك ..

لنبحث عنها ..

ani.gif
#6

السلام عليكم يا أخ عبد الله هذا هو سؤالي لك ولكل أعضاء المنتدى

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

السؤال :

ذكرت في الدرس مايلي :

اقتباس
4. التحقق من وجود مكتبة الـ NET Framwork.:

ويبدو هذا الشرط غاية في الأهمية حيث أنه لابد من وجود مكتبة الـ NET Frmaework. لتشغيل أي تطبيق يتم تصميمه بواسطة الـ Visual Studio .NET ومن هنا تكمن أهمية وجود هذه المكتبة لأنه من دونها لن تكون هناك فائدة لتثبيت البرنامج لأنه لن يعمل ..

يتم إنشاء هذا الشرط من خلال القسم الثاني Launch Conditions، ومن خلال الخاصية InstallUrl يتم تحديد موقع الملف dotnetfx.exe الخاص بتثبيت مكتبة الـ NET Frmaework. لكي يتم تشغيله في حال عدم وجود هذه المكتبة في جهاز المستخدم

كيف أخي يمكن تحديد مكان وجود الملف dotnetfx.exe بفرض أنني وضعته في مجلد البرنامج وذلك لكي يتم تنصيبه تلقائيا عند طلبه أي عند عدم وجوده في حاسب المستخدم وذلك من خلال الخاصية installUrl

هل من المعقول أن نطلب من المستخدم تنصيبها على الجهاز بطريقة يدوية و لا يمكن معالجتها من خلال Windows installer

فكلنا ياجماعة يقوم بتطوير برامج على الدوت نيت و بالتالي هي تحتاج إلى Dot Net FrameWork حتما أرجوكم دعونا نفكر بطريقة فعالة لحل هذه المشكلة .

قرأت مقالة في هذا الرابط ولكن بالاستعانة بكود خارجي مكتوب ب ++C

/index.php?showtopic=64846

هناك طلب آخر رجاء إذا سمحتم ... ياريت تتوسعوا في شرح كيفية التعامل مع الريجستري وتفردوا لها موضوع لوحده وخاصة طريقة قراءة القيم وكتابة القيم فيه وكيفية الاستفادة من ذلك في حماية البرامج و عمل نسخ تجريبية .....وجزاكم الله خيرا

تم تعديل هذه المشاركة بواسطة was_hal في 16 أكتوبر 2005 في 15:25

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#7

ربنا يكرمك و جزاك الله كل خير

:)

اللهم علمنا ما ينفعنا و نفعنا بما علمتنا

#8

تسلم مشرفنا

هذا ما كنت أبحث عنه منذ زمن !!!!!!!!

تحياتي وجزيل شكري وامتناني :)

{ وقل رب زدني علماً }

#9

أخي الفاضل was_hal لا يوجد مشكلة في تحديد المسار ليدل على موقع المكتبة ولكن هذه الخاصية لا تظهر في تحزيم الـ Windows Application

بالنسبة لحل المشكلة فهي ممكنة وسأقوم بمحاولة توضيحها لاحقاً ..

بخصوص الريجستري والتعامل معه فيمكن تحميل الملف التالي

/index.ph...pe=post&id=9675

أما بخصوص الاستفادة منه في حماية البرامج والنسخ التجريبية فهو ما سيتضح بعد معرفة التعامل معه عموماً،،

ولكن من السهل تجاوز مثل هذه الحماية

وأما بخصوص قراءة وكتابة القيم فيمكنك مراجعة الدرس التالي:

/index.php?showtopic=42743

الإخوة was_hal - IOException - تمهيدي شكراً لكم وأتمنى لكم التوفيق ..

تم تعديل هذه المشاركة بواسطة عبد الله فتحي في 21 أكتوبر 2005 في 16:28

ani.gif
#10

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

لذلك سنقوم باستخدام ما يسمى بالـ Setup.exe BootStrapper Sample، وهو عبارة عن ملف تنفيذي يقوم بعملية البحث التلقائي عن مكتبة الـ NET FrameWork. وفي حال عدم تواجدها فإنه يقوم بتحميلها إلى جهاز المستخدم بشكل صامت وبدون إزعاج، بعدها يتم تحميل التطبيق نفسه، والذي قمنا بتحزيمه سابقاً من خلال الـ Microsoft Windows Installer في ملف واحد يحمل الامتداد msi ..

وفيما يلي سنشرح العمليات التي يقوم بها هذا الـ Setup.exe BootStrapper Sample بشيء من التفصيل، رغم أن معرفتها ليست بالأهمية الكبيرة:

العملية الأولى: التحقق من تواجد مكتبة الـ NET FrameWork.

وذلك من خلال مفتاح الريجستري التالي

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\v1.0

حيث يتم التحقق من رقم الإصدارة وما إذا كانت مماثلة لتلك التي يحتاجها التطبيق أو لا، وفي حال عدم تواجد المكتبة أو عدم توافق الإصدارة فإنه يتم الانتقال إلى العملية الثانية والبدء بتحميل مكتبة الـ NET FrameWork.

لاحظ أنه من الممكن التحقق من إصدارة اللغة من خلال تحديد رمز اللغة التي نريد التحقق منها في ملف الإعدادات Setting.ini، وفي حال لم يتم تحديد أي لغة فإنه سيتم اعتبار اللغة الإنجليزية تلقائياً ..

العملية الثانية: التحميل الهادئ لمكنبة الـ NET FrameWork.:

وذلك من خلال استخدام الأمر التالي لبدء التحميل

dotnetfx.exe /q:a /c:"install /l /q"

ويقوم هذا الأمر بإخفاء كافة الواجهات ورسائل الخطأ التي تظهر في حال التحميل العادي لمكتبة الـ NET FrameWork. فيما يسمى بعملية التحميل الصامت أو الهادئ، ويتم تسجيل المعلومات الخاصة بالتحميل ورسائل الخطأ في الملف Netfx.log وتخزينه في مجلد الـ Temp ..

العملية الثالثة: معالجة الأخطاء العامة أثناء عملية التحميل

وفيما يلي توضيح لرسائل الخطأ التي يتم معالجتها

الخطأ 3010 والخطأ 8192 ويقعا عند الحاجة إلى إعادة تشغيل الجهاز ..

ويتم معالجته بالرسالة التالية Setup requires a reboot. Would you like to reboot now?

الخطأ 4101 ويقع في حال تشغيل نسخة أخرى من برنامج التثبيت ..

ويتم معالجته بالرسالة التالية Another instance of setup is already running

الخطأ 4097 ويقع في نظام الـ Windows NT، وفي حال عدم الامتلاك لصلاحيات التحميل

ويتم معالجته بالرسالة التالية You do not have the permissions necessary to install this application. Please contact your administrator

الخطأ 1633 ويقع في حال وجود مشاكل في منصة تشغيل التطبيق

ويتم معالجته بالرسالة التالية Your computer is not configured properly to run this application. Please contact support

بقية الأخطاء التي من الممكن أن تحدث أثناء عملية التحميل

ويتم معالجتها بالرسالة التالية Setup has encountered errors. Installation cannot proceed

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

وذلك من خلال استخدام الأمر التالي

msiexec /i myapp.msi REBOOT=ReallySuppress

والذي يقوم بتشغيل الملف الخاص بتثبيت التطبيق ( الذي تم تحزيمه ) على جهاز المستخدم ..

وهذا هو مجمل العمليات التي يقوم بها الـ Setup.exe BootStrapper Sample، وكما ذكرنا فليس من الضروري معرفتها لأنها تتم بشكل تلقائي في الخلفية ودون تدخل من المطور أو المستخدم ..

ولكن لكي تتم العملية بشكل سليم يجب أن نقوم بإنشاء ملف خاص بالإعدادات يحمل الاسم Settings.ini، ويحتوي على المعلومات المطلوبة أثناء التثبيت، كما أنه يستحسن إنشاء ملف نصي ينبه المستخدمين إلى الإعدادات المطلوبة لتثبيت التطبيق، وبطبيعة الحال لابد أن نضيف ملف الـ Dotnetfx.exe والخاص بتحميل مكتبة الـ NET FrameWork.، وكل هذه الملفات يتم تجميعها إلى جوار ملف الـ Setup.exe BootStrapper Sample، وملف تثبيت التطبيق ذو الامتداد msi. في مجلد واحد ..

كيفية إنشاء ملف الإعدادات Settings.ini:

بداية يجب أن نعرف أن ملف الـ Setup.exe BootStrapper Sample يحتاج إلى ملف إعدادات خارجي يحتوي على:

- موقع ملف الـ Dotnetfx، وموقع ملف التطبيق msi file

- إصدارة لغة مكتبة الـ NET FrameWork. المراد التحقق من وجودها

- النص المخصص الذي سيظهر في مربعات الحوار الخاصة بالملف Setup.exe

وفيما يلي سنضع الشكل التقليدي البسيط لملف الإعدادات Settings.ini والعناصر الموجودة بداخله، مع إمكانية إسناد القيم المناسبة لكل عنصر

[Bootstrap]
Msi=
LanguageDirectory=
ProductName=
DialogText=
CaptionText=
ErrorCaptionText=
FxInstallerPath=

العنصر MSI يحتوي على موقع الملف الخاص بتثبيت التطبيق MSI File، ومن الممكن كتابة الاسم مباشرة ليدل على أنه موجود في نفس مجلد الـ Setup.exe كالتالي:

Msi=ArabTeam.msi

ليدل على أن الملف ArabTeam.exe هو الملف الخاص بتثبيت التطبيق، وأنه موجود في نفس مجلد الـ Setup.exe

كما أنه من الممكن أن يكون موقع ملف التثبيت في مجلد فرعي كالتالي:

Msi=Setup/ArabTeam.msi

على اعتبار أن ملف الـ ArabTeam.msi موجود في مجلد فرعي بالاسم Setup

العنصر LanguageDirectory يحتوي على إصدارة لغة مكتبة الـ NET FrameWork. المراد التحقق من وجودها، وفي حال الرغبة في تجاهل هذا العنصر فإنه يتم إضافة فاصلة ( ' ) قبل العنصر وسيتم اختيار اللغة الإنجليزية بشكل افتراضي، أما في حال اختيار لغة ما فإنه يتم إضافة رمز اللغة، مثلاً اللغة الفرنسية fr، واللغة الألمانية de وهكذا ..

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

العنصر DialogText ويحتوي على النص الذي سيظهر مربع الحوار الذي سيظهر بعد تشغيل ملف الـ Setup.exe، وفي حال الرغبة في تجاهل هذا العنصر فإنه يتم إضافة فاصلة ( ' ) قبل العنصر وسيتم الاستعاضة عنه بـ To start Application Setup, click OK. To quit without installing, click Cancel

العنصر CaptionText ويحتوي على العنوان الذي سيظهر في نافذة التثبيت، وفي حال الرغبة في تجاهل هذا العنصر فإنه يتم إضافة فاصلة ( ' ) قبل العنصر وسيتم الاستعاضة عنه بالعنصر ProductName ..

العنصر ErrorCaptionText ويحتوي على العنوان الذي سيظهر في نوافذ الخطأ، وفي حال الرغبة في تجاهل هذا العنصر فإنه يتم إضافة فاصلة ( ' ) قبل العنصر وسيتم الاستعاضة عنه بـ Application Setup Error ..

العنصر FxInstallerPath ويحتوي على موقع الملف الخاص بتثبيت مكتبة الـ NET FrameWork. كما هو الحال بالنسبة للعنصر الأول، وفي حال تركه فارغاً فإن هذا يعني أن الملف موجود في نفس مجلد الـ Setup.exe

هذا الموضوع مخصص للإصدارة 1.0 من مكتبة الـ NET FrameWork.

تم تعديل هذه المشاركة بواسطة عبد الله فتحي في 21 أكتوبر 2005 في 04:17

ani.gif
#11

ياريت بس لو تضع لنل مثال

بارك الله فيك

#12

يتم تحميل الـ Setup.exe Bootstrapper Sample من الرابط التالي:

http://www.microsoft.com/downloads/details...&displaylang=en

أما بخصوص المثال فلا أرى فائدة منه لأن العملية تختلف من تطبيق إلى آخر

حاول القيام بذلك وإذا واجهتك أي مشكلة سنحاول المساعدة

ani.gif
#13

السلام عليكم ورحمة الله وبركاته

ربنا يبارك لك ياباشا في الموضوع ده

ونحن ننتظرك في الدروس القادمة كما وعدتنا ونحسبك على خير إن شاء الله

اقتباس
جيد جداً ،، وأنا من الممكن أن أشارككم في موضوع الكريستال ريبورت ..

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

المشكلة أنني لا أستطيع تقديم موعد معين ولكن لن يكون ذلك قبل انتهاء شهر رمضان

وجزاك الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#14

بارك الله فيك أخي أحمد ...

وأنا عند وعدي بإذن الله ...

ani.gif
#15

جزاك الله خيرا اخي عبد الله على الموضوع والشرح الرائع جدا جدا

#16

ألف شكر لك أخي عبد الله ياسلام على هذا الشرح الرائع استمر ننتظرك في دروس أخرى و جزاك الله كل خير أخوكم وسيم -waf

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#18

آسف أخي Ahmed H. Alawady لتأخري حتى الآن، ولكني سأحاول لاحقاً بإذن الله أن أفي بوعدي ..

في الرد التالي يوجد شرح لجزئية خاصة بالكريستال ريبورت وتحديداً التحزيم ..

وهي عبارة عن ملف تم ترجمته ..

ani.gif
#19

بسم الله الرحمن الرحيم

هذا النص مترجم بتصرف عن المقالة:

Crystal Reports and Visual Studio .NET

Application Deployment

من Business Objects والذي قام المشرف محمد عبد العليم بنشرها سابقاً على صفحات المنتدى.

تناقش هذه المقالة الخيارات المتاحة عند تحزيم أي من نسخة الـ Crystal Reports المضمنة مع الـ Visual Studio .NET، أو النسخة الكاملة من الـ Crystal Reports 9، ولن يختلف الأمر كثيراً بالنسبة للإصدارات الأحدث.

المحتويات:

--> مقدمة

--> تضمين التقارير في تطبيق الـ NET.

--> نظرة عامة على طرق التحزيم والنشر

--> التحزيم باستخدام الـ Merge Modules

--> التحزيم باستخدام الـ Interactive Install

--> تحزيم ونشر تطبيقات الـ WEB

--> تحزيم ونشر تطبيقات الـ Windows

--> مصادر إضافية

--> مقدمة:

تقدم الـ Crystal Reports العديد من الإمكانيات الهائلة فيما يتعلق بتصميم التقارير المخرجة لمستخدم تطبيقات الـ NET.، حيث يتيح هذا البرنامج بيئة تصميم خاصة داخل الـ Visual Studio .NET لتصميم التقارير وتعديلها، فضلاً عن البيئة التي يوفرها البرنامج نفسه.

من الممكن توفير التقرير في جهاز المستخدم مباشرة، أو نشره كخدمة WEB على مخدم الويب WEB Server، وذلك على حسب طبيعة التطبيق الذي نقوم بتطويره ( ما إذا كان Windows Application أو WEB Application ) وعلى أساسه نقوم باختيار أي من الـ Windows Form Viewer أو الـ WEB Forms Viewer

--> تضمين التقارير في تطبيق الـ NET.:

لاحظ أنه عند إضافة التقارير في تطبيقات الـ NET. يتم اعتبارها تلقائياً كمصادر مضمنة في التطبيق مباشرة، مما يعني أنه سيتم ضمها إلى منصة التجميع assembly's manifest عند ترجمة التطبيق ( عملية الـ Complie ) ولن يتم تحميلها من ملفات RPT. منفصلة، وعليه فلا حاجة لتضمين ملفات التقارير ( RPT Files. ) عند تحزيم التطبيق.

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

ولكي نقوم بمنع برنامج التحزيم من من تضمين ملفات التقارير إلى التطبيق مباشرة فإننا نقوم باتباع الخطوات التالية:

1. بعد إضافة التقرير إلى مشروعنا الحالي نقوم بتحديده من نافذة الـ Solution Explorer

2. من نافذة الخصائص Properties Window نقوم بتغيير الخاصية Build Action بحيث تصبح None بدلاً من Embedded Resource

في حالة استخدام الخطوات السابقة فإنه لن يتم تضمين ملفات التقارير إلى منصة التجميع assembly's manifest، وإنما سيتم تحميلها من القرص disk، عن طريق تمرير مسار ملف التقرير إلى الوظيفة Load التابعة للكائن Reportdocument

عند تحزيم التطبيقات التي تحتوي على تقارير غير مضمنة فإنه يجب أن نقوم بإضافة هذه التقارير يدوياً إلى برنامج التحزيم، علماً بأن هذه الطريقة تُسهل عملية تعديل التقرير وإعادة تحزيمه بدون الحاجة إلى إعادة ترجمة التطبيق من جديد، ولكن بالمقابل فإنه لا يمكن استخدام كائنات التقرير Strongly-typed report objects، كما أنه سيتم تحميل ملفات التقارير من القرص disk

--> نظرة عامة على طرق التحزيم والنشر:

هناك طريقتين لتحزيم ملفات الـ RunTime الخاصة بالـ Crystal Reports 9 لنشرها في جهاز المستخدم:

- استخدام الـ Merge Modules

- استخدام الـ Interactive Install ( والتي تسمى أيضاً بـ redistributable أو server install )

لاحظ أنه في حال استخدام النسخة المضمنة من الـ Crystal Reports فإنك ستكون محدوداً باستخدام الطريقة الأولى فقط ( Merge Modules )، بخلاف ما لو كان لديك النسخة الكاملة فإنك ستتمكن من استخدام أي من الطريقتين أعلاه.

ملاحظة:

لتحديد ما إذا كان لديك النسخة الكاملة أو المضمنة من الـ Crystal Reports:

1. من خلال بيئة الـ Visual Studio .NET قم بسرد القائمة Help ثم اختر About

2. قم بالبحث عن العنصر Crystal Reports في القائمة installed product

- إذا كنت تستخدم النسخة الكاملة فإنه سيظهر لك Crystal Reports 9 for Visual Studio .NET

- إذا كنت تستخدم النسخة المضمنة فإنه سيظهر لك Crystal Reports for Visual Studio .NET

على الرغم من أن الطريقتين السابقتين مختلفتين إلا أنهما تقومان بنفس المهمة وتحميل نفس الملفات، ويكمن الفرق بينهما في أن الطريقة الأولى ( استخدام الـ Merge Modules ) مخصصة للمطورين الذين يريدون تضمين الملفات الضرورية لتشغيل الـ Crystal Reports ( ملفات الـ RunTime ) إلى حزمة التطبيق، بحيث يتم تحزيمها ونشرها معه، أما الطريقة الثانية ( استخدام الـ Interactive Install ) فهي مخصصة للمطورين الذين يريدون القيام بنشر هذه الملفات بشكل منفصل عن التطبيق.

--> التحزيم باستخدام الـ Merge Modules:

هناك بعض المكونات الأساسية التي يجب إضافتها إلى برنامج التحزيم Setup Project عند الرغبة في توزيع ونشر تطبيق يستخدم الـ Crystal Reports 9 وهي:

- ملفات التقارير ( RPT Files. )

- ملفات الـ Crystal Reports Merge Modules

- ملفات أخرى ضرورية

ملفات التقارير ( RPT Files. ):

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

ملفات الـ Crystal Reports Merge Modules:

يتم تحديد ملفات الـ Merge Modules التي يجب إضافتها إلى برنامج التحزيم وفقاً لإصدارة الـ Crystal Reports بالإضافة إلى إصدارة الـ Visual Studio .NET، ولقد ذكرنا سابقاً طريقة تحديد إصدارة الـ Crystal Reports، وفيما يلي طريقة تحديد إصدارة الـ Visual Studio .NET:

1. من خلال بيئة الـ Visual Studio .NET قم بسرد القائمة Help ثم اختر About

2. ابحث في أعلى نافذة About عن العبارة Microsoft Development Environment والذي سيأتي بعدها مباشرة رقم إصدارة الـ Visual Studio .NET

الإصدارة الكاملة من الـ Crystal Reports 9 مع الـ VS 2002 أو الـ VS 2003:

إذا كنت تستخدم الإصدارة الكاملة من الـ Crystal Reports 9 مع أي من الـ Visual Studio 2002 أو الـ Visual Studio 2003 قم بتحميل ملفات الـ Merge Modules من موقع الدعم الفني للـ Crystal Reports على الرابط التالي:

http://support.crystaldecisions.com/search

عند فتح الصفحة السابقة قم بالبحث عن "cr9netmergemodules" لكي تصل إلى ملفات الـ Merge Modules الخاصة بالـ Crystal Report9 مع الـ VS.NET حسب اللغة الخاصة بك.

هناك أربعة ملفات Merge Modules ربما تكون بحاجة لإضافتهم إلى برنامج التحزيم، وهي:

reportengine.msm

crnetruntime.msm

mapping.msm

license.msm

الملف reportengine.msm:

يتم استخدام هذا الـ Merge Modules لتحميل الملفات الأساسية التي تحتوي على محرك الـ Crystal Reports، ويعتبر هذا الملف مطلوباً بشكل دائم في تطبيقات الـ Crystal Reports 9 .NET

الملف crnetruntime.msm:

يتم استخدام هذا الـ Merge Modules لتحميل مكونات الكريستال Crystal Reports 9 .NET managed components مثل:

CrystalDecisions.CrystalReports.Engine.dll

CrystalDecisions.Web.dll

CrystalDecisions.Windows.Forms.dll

ويعتبر هذا الـ Merge Modules مطلوباً لكل التطبيقات التي تستخدم أي من مكونات الـ .NET المعالجة.

الملف mapping.msm:

يتم استخدام هذا الـ Merge Modules لتحميل الملفات المطلوبة لدعم إظهار الخرائط الجغرافية بداخل التقارير، ويعتبر هذا الـ Merge Module مطلوباً فقط في الحالات الي يتم فيها تضمين الخرائط الجغرافية بداخل التقرير.

الملف license.msm:

يتم استخدام هذا الـ Merge Module لتحديد كود الترخيص من أجل ترخيص محرك التقارير، ويعتبر هذا الـ Merge Module مطلوباً بشكل دائم في تطبيقات الـ Crystal Reports 9 .NET

عند إضافة ملف license.msm إلى برنامج التحزيم فإنه سيتم إظهار الخاصية LicenseKey التي تقبل كود الترخيص، والذي يتم إرساله إليك بالبريد الإلكتروني عند تسجيل المنتج، كما أنه يمكنك الوصول إليه من قائمة Help ثم الخيار About، وستجده أسفل قائمة المنتجات.

يجب التأكد من إدخال كود الترخيص المكون من 19 حرف في الخاصية LicenseKey

ملاحظة:

في حال عد إدخال كود الترخيص فإنه سيتم إظهار رسالة خطأ خاصة بالملف keycode2.dll عند تشغيل التطبيق، وأشهر هذه الرسائل:

"Invalid or Missing KeycodeV2.dll"

"Job Failed Because a Free License Could not be Obtained"

"Err Msg: "Cannot find keycode2.dll or invalid keycode"

الإصدارة المضمنة من الـ Crystal Reports مع الـ VS2002 أو الـ VS2003:

تقوم الإصدارة المضمنة من الـ Crystal Reports مع الـ VS .NET بتوفير ملفات الـ Merge Modules التي يحتاجها وذلك في المسار التالي:

\C:\Program Files\Common Files\Merge Modules

هناك أربعة من الـ Merge Modules التي يجب إضافتها إلى برنامج التحزيم، وهي:

بالنسبة لتطبيقات الـ VS.NET 2002

- Managed.msm

- Database_Access.msm

- Database_Access_enu.msm

- RegWiz.msm

بالنسبة لتطبيقات الـ VS.NET 2003

- Crystal_Managed2003.msm

- Crystal_Database_Access2003.msm

- Crystal_Database_Access2003_enu.msm

- Crystal_RegWiz2003.msm

الملف Managed.msm / Crystal_Managed2003.msm

يتم استخدام هذا الـ Merge Module لتحميل مكونات الكريستال ريبورت المعالجة والخاصة بالفيجول دوت نت ( Crystal Reports for VS.NET managed components ) مثل:

CrystalDecisions.CrystalReports.Engine.dll

CrystalDecisions.Web.dll

CrystalDecisions.Windows.Forms.dll

الملف Database_Access.msm / Crystal_Database_Access2003.msm

يتم استخدام هذا الـ Merge Modules لتحميل جميع مشغلات قواعد البيانات التي يحتاجها الـ Crystal Reports من أجل الوصول إلى مخازن البيانات المختلفة، بالإضافة إلى مشغلات المصدر والتنسيق، والتي تقوم بحفظ التقرير في تنسيقات أخرى، مثل RTF أو HTML ... الخ.

في الواقع يقوم هذا الـ Merge Module بتحميل كل المكونات الغير معالجة ( non-manged runtime components ) بما فيها مكونات التخطيط.

الملف Database_Access_enu.msm / Crystal_Database_Access2003_enu.msm

يتم استخدام هذا الـ Merge Module لتحميل مكونات تحديد اللغة.

الملف RegWiz.msm / Crystal_RegWiz2003.msm

يتم استخدام هذا الـ Merge Module لإعداد معلومات الترخيص الخاصة بالمكونات التي يتم توزيعها، ويجب عند إنشاء برنامج التحزيم باستخدام هذا الـ Merge Module التأكد من إضافة كود الترخيص إلى الخاصية LicenseKey والتي تظهر عند إضافة هذا الـ Merge Module إلى برنامج التحزيم.

يتم إرسال كود الترخيص المكون من 19 حرف بالبريد الإلكتروني عند تسجيل المنتج، كما أنه يمكنك الوصول إليه من قائمة Help ثم الخيار About، وستجده أسفل قائمة المنتجات.

ملفات أخرى ( ضرورية ):

- مكتبة الـ NET Framework.:

بما أن الـ Crystal Reports الخاصة بالـ VS.NET مبنية على أساس مكتبة الـ NET Framework. فإنه لابد من توفير هذه المكتبة وتوزيعها مع التطبيق، لاحظ أنه عند إنشاء برنامج التحزيم فإنه لا يتم إضافة هذه المكتبة إليه بشكل تلقائي.

- مكتبة الـ ADO.NET:

إذا كان هناك أي تقرير معتمد على كائن ADO .NET DataSet فإنه يجب إضافة الـ merge modules التالية إلى برنامج التحزيم:

في بيئة الـ Visual Studio .NET 2002 يجب إضافة VC_CRT.msm و VC_STL.msm

في بيئة الـ Visual Studio .NET 2003 يجب إضافة VC_User_CRT71_RTL_X86_---.msm و VC_User_STL71_RTL_X86_---.msm

وتعد هذه الـ merge modules مطلوبة، لأنها تقوم بتحميل الملفات التالية:

Msvcr70.dll و Msvcp70.dll لبيئة الـ VS.NET 2002

Msvcr71.dll و Msvcp71.dll لبيئة الـ VS.NET 2003

والتي ( يتبع لها ) تحتوي بدورها على مشغل قواعد البيانات Crdb_adoplus.dll

ملاحظة:

تقوم الـ merge modules السابقة بتحميل بعض الملفات التي يجب أن تكون موجودة بمسار النظام System أو مسار التطبيق - وهو الأفضل -، لأنه في حال عدم وجودها سينتج خطأ أثناء وقت التنفيذ.

--> التحزيم باستخدام الـ Interactive Install:

لا يمكن استخدام هذه الطريقة إلا مع الإصدارة الكاملة من الـ Crystal Reports أو الإصدارة المتقدمة Advanced edition، ويفضل استخدام هذه الطريقة عند توزيع تطبيقات الويب، أو توزيع أكثر من تطبيق Windows إلى نفس الجهاز، وكما ذكرنا سابقاً فإن هذه الطريقة تعتمد على توزيع الملفات الضرورية لتشغيل الـ Crystal Reports بشكل منفصل عن التطبيق، ويمكن الوصول إلى هذه الملفات عن طريق الموقع التالي:

http://support.crystaldecisions.com/search

بعد الدخول إلى الموقع السابق قم بالبحث عن cr9netredist، وهنا ستجد الحزمة الخاصة بتحميل هذه الملفات على هيئة ملف .MSI، قم بتحميله على الجهاز الذي سيعمل عليه التطبيق، وسيقوم هو بالمهمة، علماً بأنه سيطلب كود الترخيص الخاص بالـ Crystal Reports أثناء التحميل.

--> تحزيم وتوزيع تطبيقات الـ WEB:

في الخطوات التالية سنفترض أننا سنقوم بتوزيع تطبيق WEB أو خدمة WEB باستخدام الـ merge modules الخاصة بالـ Crystal Reports:

1. في بيئة الـ Visual Studio .NET قم بفتح المشروع، ثم اذهب إلى القائمة View واختر Solution Explorer، ومن هذه النافذة قم بالنقر بزر الماوس الأيمن على مشروع الـ WEB واختر Add ثم New Project.

2. ستظهر النافذة الخاصة بإضافة مشروع جديد، قم باختيار Setup and Deployment Projects من الجانب الأيسر، ثم WEB Setup Project من الجانب الأيمن.

3. من نافذة الـ Solution Explorer قم بالنقر بزر الماوس الأيمن على WEB Setup Project واختر Add ثم Project Output.

4. هنا ستظهر النافذة الخاصة بإضافة Project Output Group، ومنها قم باختيار Primary Output ثم Content File لإضافته إلى برنامج التحزيم.

بعد إضافة الـ Primary Output إلى برنامج التحزيم فإنه سيتم اكتشاف بعض الملفات الضرورية

- إذا كنت تستخدم النسخة المضمنة من الـ Ctystal Reports قم بإضافة الملف managed.msm

- إذا كنت تستخدم النسخة الكاملة من الـ Crystal Reports قم بإزالة الملفين dotnetfxredist_x86_enu.msm و dotnetcrystalreports.msm

وفي كلتا الحالتين قم بإزالة الملفين dotnetfxredist_x86_enu.msm و dotnetcrystalreports.ms وذلك إذا لم تتم عملية الإزالة لهما بشكل تلقائي.

ملاحظة:

إذا كنت تستخدم النسخة الكاملة من الـ Crystal Reports فإنه يجب إزالة الملفين dotnetfxredist_x86_enu.msm و dotnetcrystalreports.msm، لأنه في حال إضافتهم سيتسبب ذلك في وجود تعارض مع مكونات الـ merge modules الأخرى، لذلك قم بالنقر عليهما بزر الفأرة الأيمن من نافذة الـ Solution Explorer ثم اختر Exclude.

5. من نافذة الـ Solution Explorer قم بالنقر بزر الفأرة الأيمن على برنامج التحزيم واختر Add ثم merge modules.

6. هنا ستظهر النافذة الخاصة بإضافة الـ merge modules، ومنها قم باختيار الـ merge modules المناسبة، والتي تم توضيحها سابقاً، ثم قم بإضافتها عن طريق الضغط على زر OK.

ملاحظة:

إذا كنت تعتمد في تطبيقك على كائن ADO .NET DataSET فإنه سيكون عليك إضافة المزيد من الـ merge modules والتي تم توضيحها سابقاً.

7. قم باختيار الـ merege modules الخاص بالترخيص لإظهار الخصائص التابعة له.

8. قم بإضافة كود الترخيص المكون من 19 حرف إلى الخاصية License Key، ولاحظ أنه مختلف عن رقم التسجيل المكون من 10 أرقام.

9. لإنشاء برنامج التحزيم قم بالنقر بزر الفأرة الأيمن على برنامج التحزيم (websetup1) من نافذة الـ Solution Exploere، ثم اختر Build، وبعدها ستكون جاهزاً لتوزيع تطبيق الـ WEB الخاص بك.

--> تحزيم وتوزيع تطبيقات الـ Windows:

في الخطوات التالية سنفترض أننا سنقوم بتوزيع تطبيق Windows باستخدام الـ merge modules الخاصة بالـ Crystal Reports:

1. في بيئة الـ Visual Studio .NET قم بفتح المشروع، ثم اذهب إلى القائمة View واختر Solution Explorer، ومن هذه النافذة قم بالنقر بزر الماوس الأيمن على مشروع الـ WEB واختر Add ثم New Project.

2. ستظهر النافذة الخاصة بإضافة مشروع جديد، قم باختيار Setup and Deployment Projects من الجانب الأيسر، ثم Setup Project من الجانب الأيمن.

3. من نافذة الـ Solution Explorer قم بالنقر بزر الفأرة الأيمن على المشروع واختر Add ثم Project Output.

4. هنا ستظهر النافذة الخاصة بإضافة Project Output Group، ومنها قم باختيار Primary Output لإضافته إلى برنامج التحزيم.

بعد إضافة الـ Primary Output إلى برنامج التحزيم فإنه سيتم اكتشاف بعض الملفات الضرورية

- إذا كنت تستخدم النسخة المضمنة من الـ Ctystal Reports قم بإضافة الملف managed.msm

- إذا كنت تستخدم النسخة الكاملة من الـ Crystal Reports قم بإزالة الملفين dotnetfxredist_x86_enu.msm و dotnetcrystalreports.msm

وفي كلتا الحالتين قم بإزالة الملفين dotnetfxredist_x86_enu.msm و dotnetcrystalreports.ms وذلك إذا لم تتم عملية الإزالة لهما بشكل تلقائي.

ملاحظة:

إذا كنت تستخدم النسخة الكاملة من الـ Crystal Reports فإنه يجب إزالة الملفين dotnetfxredist_x86_enu.msm و dotnetcrystalreports.msm، لأنه في حال إضافتهم سيتسبب ذلك في وجود تعارض مع مكونات الـ merge modules الأخرى، لذلك قم بالنقر عليهما بزر الفأرة الأيمن من نافذة الـ Solution Explorer ثم اختر Exclude.

5. من نافذة الـ Solution Explorer قم بالنقر بزر الفأرة الأيمن على برنامج التحزيم واختر Add ثم merge modules.

6. هنا ستظهر النافذة الخاصة بإضافة الـ merge modules، ومنها قم باختيار الـ merge modules المناسبة، والتي تم توضيحها سابقاً، ثم قم بإضافتها عن طريق الضغط على زر OK.

ملاحظة:

إذا كنت تعتمد في تطبيقك على كائن ADO .NET DataSET فإنه سيكون عليك إضافة المزيد من الـ merge modules والتي تم توضيحها سابقاً.

7. قم باختيار الـ merege modules الخاص بالترخيص لإظهار الخصائص التابعة له.

8. قم بإضافة كود الترخيص المكون من 19 حرف إلى الخاصية License Key، ولاحظ أنه مختلف عن رقم التسجيل المكون من 10 أرقام.

9. لإنشاء برنامج التحزيم قم بالنقر بزر الفأرة الأيمن على برنامج التحزيم (setup1) من نافذة الـ Solution Exploere، ثم اختر Build، وبعدها ستكون جاهزاً لتوزيع تطبيق الـ WIndows الخاص بك.

--> مصادر إضافية:

للحصول على معلومات ومصادر إضافية عن الـ .NET بإمكانك زيارة المواقع التالية:

صفحة منتج الـ NET.

http://www.crystaldecisions.com/net

صفحة المطورين

http://www.crystaldecisions.com/getinthezone

صفحة الدعم الفني

http://support.crystaldecisions.com/search

قائمة بالأمثلة التطبيقية

http://support.crystaldecisions.com/fix/samplescr.asp

مع خالص تحياتي

aFrNeT

ani.gif
#20

جزاك الله خيراَ أخي على الموضوع المهم لكن عندي سؤال لو سمحت

اقتباس
المقصود بأنواع المفات هنا الـ Extension ( الامتداد ) الخاص بها، كما هو الحال بالنسبة لملفات الـ Microsoft WinWord مثلاً فهي تأخذ الامتداد DOC، وهي مرتبطة ببرنامج الـ Word، فعندما يتم النقر على أحد هذه الملفات مرتين فإنه يتم تشغيل برنامج الـ Word وفتح الملف، وكذلك هو الحال بالنسبة لملفات الـ TXT وبرنامج الـ Notepad، وملفات الـ RTF وبرنامج الـ Wordpad ... الخ

هل تريد أنت أيضاً أن يكون لتطبيقك ملفات من نوع معين مرتبطة به بهذا الشكل، الأمر أبسط مما تتصور، فبعد أن كان ذلك يتطلب كوداً معقداً في الإصدارات الأقدم فإن الأمر لا يتعدى نقرة بالماوس في بيئة الـ Visual Studio .NET

..

ماذا لو كان البرنامج ينشأ ملف بامتداد خاص به مثل برنامج أكروبات مثلاً

نجد امتداد البرنامج exe

بينما الملفات التي يقرؤها بامتداد pdf

كيف نحدد امتداد وأيقونة الملف وليس البرنامج

#21

أهلاً بك أخي شادي

في الواقع نحن لا نتحدث عن امتداد البرنامج والذي بلا شك سيكون exe كما ذكرت

وإنما نتحدث عن امتداد الملف الذي يقوم البرنامج بتشغيله، والذي من الممكن أن يكون أي امتداد خاص نختاره نحن

لاحظ معي باقي الخطوات

اقتباس
من نافذة الـ File Types Editor سنقوم بالنقر بزر الماوس الأيمن واختيار Add File Type، ثم نقوم باختيار اسم تعريفي لملفات النوع الجديد الذي سنضيفه، وبعد ذلك من نافذة الخصائص سيكون علينا تعديل الخاصية Extension إلى نوع الملف الذي نريد تخصيصه للتطبيق الخاص بنا، ويجب أيضاً تعديل الخاصية Command لتحديد مسار التطبيق المرتبط، والذي سيتم تشغيله عند محاولة تشغيل الملف ..

تمنياتي بالتوفيق

ani.gif
#22

إخواني جميعاً شكراً لكم هذه المناقشة الرائعة لهذا الموضوع البالغ الأهمية ...

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

ولذلك فأتمنى أن أكون قد بينت ما عرفتة من خلال قراءتي لموضوعك هذا المشوق .. ولكن لا أريد أن أطيل .. و وفقك الله وإلى الأمام دائماً إبشاء الله ..

إخواني جميعاً أقول وبكل صراحة وصدق أنني كنت أطمح لتطوير مشروعي وأعمل له Setup ( نظراً لأنني لم أعمل ذلك من قبل في أي إصدار سابق لـ VB )

وبعد قراءتي لهذا الموضوع طبقتة ولقد عمل 100% فشكراً لكم جميعاً ...

ولكن أريد ممن لدية العلم أن يساعدني ويساعد الإخوة الأخرين في تطور عملية الـ Setup هذه لتلبية الإحتياجات التالية :-

ملاحظة هامة / نظامي يعمل في VB.Net2005 Windows Application و SqlServer2000 Enterprise Edition

- التحقق من وجود برنامج الـ Windows Installer فأنا أعلم بأنة من خلال إضافة Launch Condition فإنة يوجد مفتاح خاص لذلك يمكنن من عمل ذلك ولكنني بصراحة لم أفهمها فأرجو الشرح بشئ من التفصيل .. مع العلم بأنني ساضع الملف WindowsInstaller-KB893803-v2-x86.exe في نفس مجلد التحميل ولذلك يتم البحث عنة فإذا لم يكن موجود يتم تحميلة من مجلد التحميل ..

- التحقق من وجود MS-SQLSERVER2000 Enterprise Edition فإذا لم تكن موجودة يتم تحميلها من نفس مجلد التحميل ( سيتم وضع برنامج SQLSERVER في نفس مجلد البرنامج ) لذلك يتم التحميل تلقائي .

- هل بالإمكان الإستغناء عن الملف BootStrapper) Setup.exe )الذي زودنا به الأخ الفاضل عبدالله فإذا كان بالإمكان فكيف ؟؟؟؟ مالم فما هي الإضافات على الملف Settings.ini مثل إضافة Windows Installer ... و غيرها

إخواني إذا تمكنا من القيام بذلك :-

1- فإنه يمكننا وضع برنامجنا في Cd وااااااااااااااااحد فقط يتم من خلالة تحميل كافة إحتياجات النظام وكذلك النظام نفسة .

2- من خلال تشغيل ملف تنفيذي واااااااااااااحد ( واو واو اوا واو ) نختصر وقت كبير ومشقة كبيرة .

فأرجو مساعدتي في القيام بذلك ...

ومشكورررررررررين.

#23

اضف إلى ماسبق إخواني الكرام بأنة عند قيامي ببناء النظام فإنه تظهر لي الرسالة التالية :

Warning	1	'scrrun.dll' should be excluded because its source file 'C:\WINDOWS\system32\scrrun.dll' is under Windows System File Protection.

فماسبب ظهور هذه الرسالة

تم تعديل هذه المشاركة بواسطة mqmmss في 6 مايو 2006 في 17:38

#24

أخي الكريم

لا جاجة في VS2005 pro أن تستخدم BootStrapper فقد تم تطوير التحزيم ليفي بكل متطلباتك التي سألت عنها و في الوصلة التالية موضوع يشرح عن هذه الميزة

/index.ph...ndpost&p=438230

أرجو أن اكون قد حققت الإفادة

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#25

كلامك صحيح أخي ولكن ماذا لو أردت أن أقوم بتحميل برنامج غير مضمن ضمن VS.NET2005

مثل برنامج MS-SQLSERVER2000 Enterprise Edition

فما هو الحل

تم تعديل هذه المشاركة بواسطة mqmmss في 8 مايو 2006 في 20:20

مواضيع مشابهة