سلسلة شروحات innoSetup الدرس الثامن : صناعة ملف التثبيت عن طريق الأكواد قسم [Tasks]

ناصر بعزيز

Administrator
طاقم الإدارة
إنضم
7 أغسطس 2018
المشاركات
646
مستوى التفاعل
666
النقاط
93
الإقامة
الجزائر
الموقع الالكتروني
mx-blind.com
الجنس
ذكر
نظام التشغيل
Windows10
قارئ الشاشة المستخدم
jaws
بسم الله الرحمان الرحيم, والصلاة والسلام على أشرف الخلق والمرسلين
أما بعد فأيها الأحباب أهلا وسهلا بكم في الدرس الثامن من دورة تعلم برنامج InnoSetup
اليوم وبعد غياب دام أيام بسبب بعض المشاغل, نعود اليوم لدورتنا ومع درس جديد
حيث أن درسنا هذا سيكون طويلا بعض الشيء
اليوم سنتعرف على طريقة انشاء أيقونات واختصارات وكذالك مهام أخرى كثيرة
لاكن سوف تكن كلها مرتبطة بقسم معين إسمه tasks
أي المهام
حيث من هنا سنقم بصناعة مربعات تحديد
ملاحظة :
في هذا القسم سأشرح ما يهمنا فقط ولن أتطرق لانشاء المجموعات وأزرار الإختيار بل سأكتفي بمربعات التحديد.

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

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

[Tasks]
Name: desktopicon; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Components: main
Name: desktopicon\common; Description: "For all users"; GroupDescription: "Additional icons:"; Components: main; Flags: exclusive
Name: desktopicon\user; Description: "For the current user only"; GroupDescription: "Additional icons:"; Components: main; Flags: exclusive unchecked
Name: quicklaunchicon; Description: "Create a &Quick Launch icon"; GroupDescription: "Additional icons:"; Components: main; Flags: unchecked
Name: associate; Description: "&Associate files"; GroupDescription: "Other tasks:"; Flags: unchecked


لو لاحظتم هنا عدد كافي من الأمثلة يوضح لنا الأشكال المختلفة
لاكن لا تقلق عزيزي سنتعرف على كيفية تصميمه وسنجزء الكود لنتعرف عليه
لاكن في البداية دعونا نتفق على أمر حتى لا نكن مضطرين على تكريره في كل خطوة
ألا وهو الفاصلة المنقوطة ; للفصل بين العناصر في الكود
النقطتين لاعطاء القيمة الخاصة بالعنصر
فمثلا
name: disktop; ....
هيا بنا ننطلق على بركة الله
العنصر الأول وهو
Name
هذا العنصر اجباري
وهو لاعطاء اسم داخلي للعنصر
وأقصد بالاسم الداخلي هو التعريف الذي نستخدمه لاستدعائه لاحقا وربطه
ويمكن لو عندنا الاسم عنصر رئيسي أن نربط به عناصر أخرى
كمثلا اختصار سطح المكتب يمكن أن نضيف له خيارات هل إذا ماكان يريد اضافة الاختصار في سطح المكتب الرئيسي أو الخاص بالمستخدم الحالي.
وهنا فعليك أن تكتب الإسم الرئيسي أولا في العنصر الرئيسي
ثم في العناصر الفرعية تكتب اسم العنصر الرئيسي ثم قاطعة خلفية وبعدها الإسم الداخلي للعنصر الأصغر
ملاحظة :
في حال قمت بإنشاء مربعات فرعية فلا يمكنك تحديدها في حال لم تقم بتحديد المربع الرئيسي.
مثال
Name: "desktopicon"
أو
Name: "desktopicon\allUsers"
أظن أن العملية أصبحت الآن واضحة.
العنصر الثاني وهو مطلوب أيضا
Description
وهو اسم العنصر الذي سيظهر للمستخدم ليقم بتحديده
طبعا بإمكانكم استخدام تخصيص اللغات الذي تكلمنا عنه
وسأعطيكم مثال لذالك
أولا المثال بدون لغات
Name: "desktopicon"; Description: "create a disktop icon"
ثانية المثال مع تخصيص العبارة من اللغة
Name: "desktopicon"; Description: "{cm:disktopIcon}"
طبعا العبارة
disktopIcon
هي العبارة التي يجب أن تكن في اللغة وتكن تحمل القيمة التي هي عبارة إنشاء الإختصار

أرجوا أن يكن ذالك واضح وفي حال واجهتكم في ذالك صعوبة فعليكم بالتعليقات.

هيا إلى العنصر التالي
GroupDescription
وهو الخاص بالمجموعة التي ينتمي إليها المربع
وذالك شأنه شأن الإسم إنما للتنظيم يستحب فعل ذالك
وطبعا هنا أيضا يمكنكم استخدام عبارات اللغة
وهنا مثال
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"
لاحظ أننا نحاول بناء الكود من جديد لاكن مع شرح كل عنصر
أرجو أن تعجبكم هذه الطريقة في الشرح
هيا الآن إلى العنصر التالي
وهو لم ندرسه بعد لاكن سأحاول توضيحه على أن نتناوله موضوع مستقل في الدروس التالية ونوضح فيه أكثر
وهو
Components
حيث هذا القسم سيساعدنا على تخصيص البرنامج كما نريد
أكيد شاهدنا في يوم ما ونحن نثبت برنامج ما
أنه يطلب منا اختيار نوع التثبيت كمثلا تثبيت كامل وتثبيت مخصص
ومن ثما هناك خيارات تلحق بكل نوع حيث نقم بتخصيص ما نريد تثبيته وما لا
هنا أنت ممكن تربط هذا المربع بعنصر ما
حيث عندما يختار المستخدم ذالك العنصر يكن بإمكانه تحديد المربع هذا أو إزالة تحديده
وفي حال لم تختار العنصر أو العناصر المحتملة المرتبطة به فلن يكن المستخدم قادر على تحديد العنصر أو إزالة تحديده
أرجو أن يكن التوضيح المبدئي واضح
فهنا عزيزي بإمكاننا أن نربط أكثر من عنصر في قسم
Components
مع مربع واحد
حيث نفصل بين كل عنصر وعنصر بالمسافةة
فهيا سيتضح ذالك مع المثال
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"; Components: main
أو
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"; Components: main full
ملاحظة المربع الخالي من عنصر Components سيكون متاح دائما
أتمنا أن يكن الأمر واضح وسنفصل فيه أكثر في الدروس القادمة إن شاء الله
هيا بنا للعنصر التالي وهو
Flags
حيث هذا العنصر يعمل كتخصيص حالة أو إعطائه أوامر
كمثلا أن يكن المربع تلقائيا محدد أو غير محدد وإلى غير ذالك.
ونفصل بين الإعداد والآخر بالفاصلة وسنرى في الأسفل مثال للتوضيح طبعا
أول اعداد في هذا الخيار هو
checkablealone
هذا الإعداد لو قمت باستخدامه مع مربع يحمل مربعات فرعية فسيسمح للمربع أن يحدد ولو لم تقم بتحديد أي من عناصره الفرعية
افتراضيا سيتم إلغاء تحديد المربع في حال لم تقم بتحديد أي عنصر فرعي
في حال كان المربع يحتوي على عناصر فرعية


checkedonce
هذا الإعداد لو أضيف فإنه يخبر المربع بأن يكن مزال التحديد تلقائيا في حال تم العثور على نسخة سابقة من التطبيق مثبتة بالفعل

dontinheritcheck
هذا الإعداد يخبر المربع بأن لا يحدد تلقائيا في حال قام المستخدم بتحديد أي عنصر فرعي منه
افتراضيا المربع الذي يحمل عناصر فرعية يتم تحديده فورا إذا قام المستخدم بتحديد أي عنصر فرعي منه

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


unchecked
هذا سيجعل مربع التحديد غير محدد بشكل تلقائي

أمثلة
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"; Components: main full; Flags: unchecked
أو
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"; Components: main full; Flags: unchecked restart
أو
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"; Components: main full; Flags: unchecked restart checkedonce
أظن أن الطريقة قد وصلتكم أحبابي
أتمنا أن تكن كذالك

هناك أيضا بعض العناصر التي سنحتاجها لذا سأتطرق إليها هنا
فهيا لنكمل
Languages
هنا عزيزي في حال أردت أن تربط عنصرك بلغة محددة
مثلا خيار يظهر في حال كانت لغة التثبيت اللغة الفلانية أو اللغات الفلانية
حيث تقم بالفصل بين اللغات بالمسافة
وطبعا اسم اللغة يكن ذالك الاسم الذي في البداية كما تعرفنا عليه في درس اللغات
لذا اطمئن لن أثرثر في الأمر أكثر
هاك مثال حتى تفهم
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"; Components: main full; Flags: unchecked restart checkedonce; Languages: arabic
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"; Components: main full; Flags: unchecked restart checkedonce; Languages: arabic english
العنصر الذي لم تقم بوضع خيار اللغة فيه فإنه سيظهر في جميع اللغات

هيا ننتقل إلى الأمر التالي

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

وهذا مثال
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"; Components: main full; Flags: unchecked restart checkedonce; Languages: arabic english; MinVersion: 6.2
طبعا إصدارات ويندوز ليس المقصود بها 8.1 و 10
بل لكل إصدار رمز تجميع
ويمكنكم التعرف عليها من هنا


6.0.6000 Windows Vista
6.0.6001 Windows Vista with Service Pack 1
or Windows Server 2008
6.1.7600 Windows 7
or Windows Server 2008 R2
6.1.7601 Windows 7 with Service Pack 1
or Windows Server 2008 R2 with Service Pack 1
6.2.9200 Windows 8
or Windows Server 2012
6.3.9200 Windows 8.1
or Windows Server 2012 R2
6.3.9600 Windows 8.1 with Update 1
10.0.10240 Windows 10 Version 1507
10.0.10586 Windows 10 Version 1511 (November Update)
10.0.14393 Windows 10 Version 1607 (Anniversary Update)
10.0.15063 Windows 10 Version 1703 (Creators Update)
10.0.16299 Windows 10 Version 1709 (Fall Creators Update)
10.0.17134 Windows 10 Version 1803 (April 2018 Update)
10.0.17763 Windows 10 Version 1809 (Octobe

هذه المعلومات نسختها من ميكرو سوفت لكي أسهل عليكم البحث

هيا لنكمل


الأمر الأخير هو
OnlyBelowVersion
حيث هذا سيقم بإظهار المربع عند تثبيت البرنامج في إصدارات ويندوز الأعلى من الإصدار المحدد هنا فقط
ونفس شكل العنصر الذي رأيناه سابقا
هاكم مثال عليه
Name: "desktopicon"; Description: "{cm:disktopIcon}"; GroupDescription: "Additional icons"; Components: main full; Flags: unchecked restart checkedonce; Languages: arabic english; MinVersion: 6.2; OnlyBelowVersion: 6.2
ملاحظة :
الثلاث عناصر الأخيرة هي مرتبطة مع الدروس السابقة كلها
حيث يمكنكم استخدامها في أي قسم من الأقسام السابقة
لذا يكفي في الدروس القادمة أن ألمح إليها فقط
وهي هنا مشروحة على ما أظن.
هذا كان درسنا اليوم

ملاحظة :
ما قلت أني لن أتطرق إليه تطرقت إليه بالفعل هههه فلا تؤاخذوني.

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