اشاره : 
سرويس هاي ويندوز به ما امکان اجراي رويههايي در پسزمينه يا Background سيستم را ميدهد. با کمک سرويسهاي ويندوز ميتوانيم تکاليفي مانند کنترل استفاده از پايگاهداده را انجام دهيم. قابل توجه اينکه، سرويسهاي ويندوز در فضاي مخصوص به خود اجرا ميشوند و به فعاليت ادامه ميدهند تا کاربر يا کامپيوتر آن سرويس را غير فعال يا به اصطلاح خاموش کند. اين مقاله ابتدا در مورد سرويسهاي ويندوز بحث خواهد کرد. سپس چگونگي ساخت سرويسهاي ويندوز در داتنت آموزش داده خواهد شد و چگونگي کنترل کردن Log و Eventها در اين برنامهها مورد بررسي قرار خواهد گرفت. پس از آن، روش نصب ويندور سرويسها نشان داده خواهد شد و چگونگي مديريت آنها مورد بررسي قرار خواهد گرفت.
بررسي مديريت سرويسهاي ويندوز در دات نت
سرويسهاي ويندوز
سرويسهاي ويندوز، سرويسها و رويههايي هستند که در پس زمينه سيستم اجرا ميشوند و چون نيازي به ارتباط با کاربر ندارند، هيچ رابط کاربري ندارند. سرويسهاي ويندوز را ميتوان روي ويندوزهاي 2000، XP و NT اجرا نمود.
معمولاً سرويسهاي ويندوز کارهايي مانند چک کردن ارتباط شبکه و دسترسي کاربران را به عهده دارد. براي اينکه سرويسهاي ويندوزي که در دستگاه شما وجود دارد را مشاهده کنيد، به Start>Controlpanel>Administrative Tools برويد و آيکون Services را کليک کنيد. شکل 1 پنجره مربوط به سرويسها را نشان ميدهد.
شکل 1
سرويس ويندوز که در رجيستري نصب ميشود، يک شيء اجرا شدني است و توسط مدير کنترل سرويسها يا SCM يا Service Control Manager مديريت ميشود.
SCM سروري است که متدها را از راه دور فرا ميخواند و به اصطلاح RPC يا Remote Procedure Call است و از مديريت محلي و از راهدور سرويسها پشتيباني ميکند.
يکي از قابليتهاي داتنت وجود کلاسهايي در آن است که ميتوان با استفاده از آنها سرويسهاي ويندوز را ساخته و آنها را مديريت نماييم (SystemServiceProcess).
اجزاي معماري سرويسهاي ويندوز
معماري سرويسهاي ويندوز از سه جزء تشکيل شده است:
Service Control Manager) SCM): با استفاده از اين بخش ميتوان سرويسها را کنترل نمود.
Service Controller Application) SCA): با استفاده از اين بخش ميتوان رفتارهاي سرويس را کنترل کرد.
Service Application) SA): اين بخش از يک تا چند سرويس تشکيل شده است.
براي ساخت سرويس ويندوز در داتنت ميتوانيم از متدهاي کلاس ServiveBase استفاده کنيم. وقتي که اين سرويس ساخته شد، بايد در رجيستري ثبت و نصب شود (با استفاده از کلاسهاي ServiceInstaller و ServiceProcessInstaller) وقتي سرويس نصب شد، با استفاده از کلاسهاي SCA و SCM ميتوان سرويس را آماده به کار يا خاموش نمود.
وقتي سرويسي در سيستمي شروع به کار نمود، ميتواند چندين حالت داشته باشد. در حال کار باشد، موقتاً کار نکند، يا خاموش باشد. حالت ديگري که ممکن است براي سرويسي به وجود آيد، Pending است که وقتي به وجود ميآيد که دستوري مانند دستور توقف موقت صادر شود، ولي هنوز کامل نشده است.
تفاوت سرويسهاي ويندوز در داتنت با برنامههاي ديگر
سرويسهاي ويندوز در داتنت تفاوتهايي با برنامههاي ديگر داتنت دارند:
بر خلاف پروژههاي معمول داتنت، برنامههاي سرويسها بايد حتماً نصب گردد.
بر خلاف پروژههاي معمول داتنت که پنجرههاي ديالوگ نمايان است، پنجرههاي سرويسها قابل ديدن نيست.
بر خلاف پروژههاي معمول داتنت که ميتوان با استفاده از کليدهاي F5 يا F11 برنامهها را اشکاليابي کرد، در سرويسهاي ويندوز ابتدا بايد آنها را درست کرد. سپس آن را نصب و شروع به کار کرد. سپس يک اشکالياب به آن متصل کنيم.
ساخت سرويس ويندوز
براي ساخت يک سرويس ويندوز در داتنت يک پروژه جديد ايجاد کنيد و همانطور که در شکل 2 مشخص شده است، نوع پروژه را Windows Service انتخاب نماييد و پروژه را بسازيد. شکل 3، properties برنامه Service 1 را که ساختهايم، نشان ميدهد.
شکل 2
هر يک از مشخصههاي اين سرويس را که بخواهيم، مي توانيم در اين قسمت تغيير دهيم. براي افزودن قابليت جديد به برنامه سرويس ويندوزي که درست کردهايم، بايد متدهاي OnStart و OnStop اين سرويسها را دستکاري کنيم. مثلاً ميتوانيم بگوييم هر وقت سرويس شروع شد، فايلي متني بسازد و متني را در آن بنويسد و وقتي که سرويس متوقف شد، فايل متني ديگري بسازد و متني را در آن بنويسد.

براي اين کار کدهاي شکل 4 را مينويسيم. حال سرويس ما درست شده است، ولي نميتوان آن را اجرا نمود. چون همانطور که قبلاً نيز ذکر شد، سرويس بايد نصب گردد.
پشتيباني سرويسهاي ويندوز از Eventهاي مختلف
سرويسهاي ويندوز از چهار Event مختلف پشتيباني ميکنند:
Start: وقتي سرويس با استفاده از SCM شروع به کار کرد، Event
سرويس Start ميشود و سيستم فايل اجرايي را مشخص کرده و متد
OnStart برنامه اصلي را اجرا ميکند.
Stop: وقتي که سرويس متوقف ميگردد.
Pause: توقف موقت سرويس
Continue: ادامه کار سرويس
يک سرويس ويندوز ميتواند کارهاي زيادي انجام دهد و Eventهاي مختلفي را کنترل نمايد. مثلاً تغيير در قدرت دستگاه را پيدا کند و Log کردن اطلاعاتي مانند تغيير در موقعيت سرويسها را انجام دهد.همچنين ميتوان کارايي سيستم را با استفاده از Performance Counters چک نمود.
براي اينکه بتوانيم اتفاقاتي که در سيستم پيش ميآيد را جمعآوري کنيم و به قول معروف Log کنيم، ميتوانيم از System Event log استفاده کنيم.
شکل 3
با استفاده از اين لوگها ميتوانيم اطلاعاتي مانند خرابي سرويسها، کمبود حافظه سيستم يا توقف سرويسها در دست را داشته باشيم. براي استفاده از اين ابزار ميتوانيم کامپوننت EventLog براي ثبت اطلاعات استفاده کنيم.

مثلاً ميتوانيم با استفاده از متد WriteEntry در EventLog اتفاقات را در سرويس خود ثبت کنيد. به عنوان مثال کد زير به EventLog ميگويد که سرويس مورد نظر شروع شده است:
("this.eventLog1.WriteEntry ("Service 1 started
يکي ديگر از ابزارهايي که ميتوانيم در سرويسهاي ويندوز از آن استفاده کنيم، Performance Counters است که کارايي برنامههايي ما را سنجش ميکند.
براي استفاده از اين ابزار از کلاس System.Diagnostics.PerformanceCounter استفاده ميکنيم. با استفاده از اين کلاس ميتوانيم اطلاعات کارايي برنامه و سيستم را جمعآوري و تحليل نماييم.
براي استفاده از اين ابزار به Server Explorer برويد و سرور مورد نظر که نام دستگاه شما است (در اين مثال AMIN) را انتخاب کنيد و مطابق شکل 5، Performance Counter مورد نظر خود را انتخاب نماييد.
مثلاً در اين مثال از شاخه batteryStatus ،ChargeStatus را انتخاب ميکنيم و با ماوس آن را به Service خود اضافه ميکنيم. وقتي اين سرويس را اضافه ميکنيم، performanceCounter 1 توليد ميگردد.
نصب سرويس ويندوز
حال که سرويس ويندوز را ساختيم، نوبت به نصب آن ميرسد. براي اين کار بايد ابتدا يک کلاس Installerبسازيم.
اين کلاس در System.Configuration.Install.Installerقرار دارد. نکته قابل اهميت اين است که Installer بايد براي تمام اجزاي سرويس اجرا شود و به آن اضافه گردد.
براي اين کار روي هر يک از اين اجزا ميرويم و راست کليک ميکنيم و همانطور که در شکل 6 مشخص شده است، منويي باز خواهد شد که داراي گزينه Add installerاست.
سيستم سپس فايل ProjectInstaller را ميسازد که داراي حداقل 2 سرويس است. ابتدا روي ServiceInstaller 1برويد و در Properties آن StartType را به صورت خودکار در آوريد. سپس روي ServiceInstaller 1 رفته و در Properties آن نوع Account را LocalSystem انتخاب نماييد.

شکل 6
بعد از اين کار پروژه را کامپايل نماييد. اگر اشکالي در برنامه شما نباشد، سيستم به شما اعلان ميکند که فايل اجرايي پروژه را نصب کنيد. براي نصب اين فايل اجرايي به Visual Studio 2005 Command Prompt برويد و مطابق شکل 7 دستور installutil را به همراه نام فايل و مسير آن اجرا نماييد تا سرويس مورد نظر ساخته شود (شکل 8). براي حذف سرويس ميتوانيد از همان دستور، ولي به صورت installutil /u استفاده کنيد.

شکل 7

شکل 8
کنترل سرويس ويندوز به کمک داتنت
Service Control Manager) SCM) در واقع چند کار انجام ميدهد:
تغيير حالت سرويس
تعيين چگونگي شروع يک سرويس
تعيين وضعيت برگشت سرويس (در صورتي که نتوانست کار کند).
تعيين کاربر براي آن سرويس
نمايش سرويسهاي وابسته به سرويس
داتنت با ارايه کلاس ServiceController کارهاي SCM را انجام ميدهد. جدول 1 متدهاي اين کلاس را به همراه کارايي هر يک نشان ميدهد:

شکل 9
کارايي
|
نام متد
|
قطع ارتباط نمونه کلاس ServiceController از سرويس و بازگرداندن منابع
|
Close
|
ادامه کار سرويس پس از توقف يا pause
|
Continue
|
اجراي دستورات خاص در يک سرويس
|
ExecuterCommand
|
توقف موقت سرويس
|
Pause
|
بازآوري اطلاعات سرويس
|
Refresh
|
شروع به کار سرويس
|
Start
|
متوقف کردن سرويس
|
Stop
|
جدول 1
|
براي کنترل کردن سرويسها بايد از طريق برنامههاي خود اين کار را انجام دهيم. مثلاً براي کنترل سرويس Service1که به تازگي ساختيم، يک برنامه Windows ميسازيم و از قسمت Service Explorer، نام دستگاه، قسمت سرويسها را انتخاب ميکنيم و Service1 را به داخل فرم ويندوز خود ميآوريم و با کمک دو دکمه همانطور که در شکل 9 مشاهده ميکنيد، ميتوانيم سرويس را راهاندازي يا متوقف نماييم.
براي دريافت کدهاي اين مقاله به قسمت دريافت فايل وب سايت ماهنامه مراجعه فرماييد.
منبع:ماهنامه شبکه - مرداد ۱۳۸۶ شماره 78
امين صفايي