برمجة خدمات الويندوز Windows Service باستخدام Visual Basic.net





إخوتي و أخواتي الأكارم أعضاء منتديات المشاغب ،

اليوم سأقوم بشرح أحد أنواع المشاريع الرائعة التي قامت مايكروسوفت بتوفيرها لنا في بيئة ال .net ألا و هي ال Windows Service




مقدمة :

ال Windows Services هي عبارة عن خدمات تقوم بالعمل خلف الكواليس ( في الخفاء ) في نظام التشغيل لتنفيذ عمليات معينة و ضرورية لنظام التشغيل و أيضاً للعديد من البرامج التي تعمل في بيئة الويندوز مثل مراقبة العمليات التي تتم على بعض الملفات ، و عمل ال Log Files و غيرها من المهام الحساسة و الدقيقة .
ال Windows Services في العادة لا تمتلك واجهة مستخدم (User Interface) و ذلك بسبب عدم الحاجة لتدخل المستخدم في طريقة أو سير عمل هذه الخدمات ، ففي الغالب تبدأ هذه الخدمات بالعمل بشكل أوتوماتيكي و خفي مع بداية تشغيل الويندوز .
في السابق ، كان تطوير و برمجة خدمات الويندوز مقتصراً على خبراء ال C++ ، و لكن مع دخول ال VB.net إختلفت الأمور ، و أصبحت عملية إنشاء هذه الخدمات أكثر سهولة و تطبيقاً .

و بالطبع ، نستطيع الاطلاع على خدمات الويندوز التي تعمل على جهازنا عن طريق ال Administrative Tools -> Services
فنحصل على قائمة بجميع الخدمات كما هو موضح في الصورة التالية :






الشرح :

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

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



خطوات التطبيق العملي :

أولاً ، نقوم بعمل مشروع جديد ، و من ثم نقوم باختيار خدمة ويندوز (Windows Service) كنوع المشروع ، و سأقوم بتسمية المشروع (ABSBAService) كما هو موضح في الصورة التالية :





و بعد ذلك يظهر لنا المشروع كما هو موضح في الصورة التالية :




نستطيع بعد ذلك أن نغير إسم الخدمة أو أي من الخيارات المتاحة كما هو موضح في الصورة التالية :






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





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

نقوم الآن بإضافة ال Installer كما هو موضح في الصورة التالية :









نقوم الآن بتعديل الخيارات التي نريدها كما هو موضح في الصور التالية :









بالطبع هناك العديد من الخيارات الأخرى التي لم أقم بتعديلها مثل :
CanStop : و التي تحدد إذا ما كان مسموحاً للمستخدم إيقاف الخدمة .
CanPauseAndContinue : و التي تحدد إذا ما كان مسموحاً للمستخدم تعليق الخدمة و إعادة تشغيلها .
AutoLog : و التي في حال كانت قيمتها True ، فسيقوم النظام بإظافة أي عملية تحصل على هذه الخدمة مثل الإيقاف و التشغيل و غيرها في ال EventLog في الويندوز .


و الآن ، و بعد أن انتهينا من تعديل الخصائص التي نريدها للأداتين ServiceProcessInstaller و ServiceInstaller ، نقوم ببناء المشروع كما هو موضح في الصورة التالية :







طبعاً إلى الآن لم ننته من العمل بعد ،
فالخدمة لم يتم تنصيبها و تسجيلها في النظام لتبدء العمل .
و لتنصيب الخدمة و تسجيلها في النظام ، نقوم بتشغيل ال Command Prompt الخاص بالفيجوال ستوديو كما هو موضح في الصورة التالية :








نقوم الآن باستخدام الأمر InstallUtil للقيام بعملية التنصيب الفعلية ، حيث نقوم بكنابة الأمر InstallUtil مع مسار الملف التنفيذي كاملاً للخدمة كما هو موضح في المثال في الصور التالية :







و بذلك نكون قد انتهينا من عملية برمجة الخدمة و تنصيبها بالكامل .
كما نلاحظ الآن ، إذا ما توجهنا لشاشة خدمات الويندوز فإننا نرى بأنه قد تمت إضافة خدمتنا في قائمة الخدمات كما هو واضح في الصورة التالية :






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

و الآن إخوتي و أخواتي الأفاضل ، وصلنا للنقطة الأخيرة ،
ألا و هي إلغاء تنصيب الخدمة من الجهاز .

في حال أردنا إلغاء تنصيب الخدمة من الجهاز فنقوم بتشغيل ال Command Prompt الخاص بالفيجوال ستوديو كما أوضحنا سابقاً ، و نقوم باستخدام الأمر InstallUtil و لكن هذه المرة نقوم باستخدام الخيار U/ كما هو موضح في الصور التالية :








ملاحظة :

· تجنبوا استخدام أدوات الواجهة الرسومية في الخدمات .
· في حال أردتم إجراء أي تعديلات على الخدمة ، فيتوجب عليكم بأن تقوموا بعمل Uninstall و من ثم بعد الانتهاء من التعديلات ، قوموا بعمل Install مرة أخرى .





أخيراً ، إخوتي و أخواتي الأكارم ،

أتمنى أن أكون قد وفقت في طرح هذا الموضوع ، و أن أكون قد شرحته بشكل مبسط و مفيد للجميع .