PDA

مشاهده نسخه کامل : چگونه يك سرويس ويندوز بسازيم؟



Trance
01-07-08, 18:03
سرويس هاي ويندوز به ما امكان اجراي رويه‌هايي در پس‌زمينه يا Background سيستم را مي‌دهد. با كمك سرويس‌هاي ويندوز مي‌توانيم تكاليفي مانند كنترل استفاده از پايگاه‌داده را انجام دهيم. قابل توجه اين‌كه، سرويس‌هاي ويندوز در فضاي مخصوص به خود اجرا مي‌شوند و به فعاليت ادامه مي‌دهند تا كاربر يا كامپيوتر آن سرويس را غير فعال يا به اصطلاح خاموش كند. اين مقاله ابتدا در مورد سرويس‌هاي ويندوز بحث خواهد كرد. سپس چگونگي ساخت سرويس‌هاي ويندوز در دات‌نت آموزش داده خواهد شد و چگونگي كنترل كردن Log و Eventها در اين برنامه‌ها مورد بررسي قرار خواهد گرفت. پس از آن، روش نصب ويندور سرويس‌ها نشان داده خواهد شد و چگونگي مديريت آن‌ها مورد بررسي قرار خواهد گرفت.


بررسي مديريت سرويس‌هاي ويندوز در دات نت‌

سرويس‌هاي ويندوز

سرويس‌هاي ويندوز، سرويس‌ها و رويه‌هايي هستند كه در پس زمينه سيستم اجرا مي‌شوند و چون نيازي به ارتباط با كاربر ندارند، هيچ رابط كاربري ندارند. سرويس‌هاي ويندوز را مي‌توان روي ويندوزهاي 2000، XP و NT اجرا نمود.

معمولاً سرويس‌هاي ويندوز كارهايي مانند چك كردن ارتباط شبكه و دسترسي كاربران را به عهده دارد. براي اين‌كه سرويس‌هاي ويندوزي كه در دستگاه شما وجود دارد را مشاهده كنيد، به Start>Controlpanel>Administrative Tools برويد و آيكون Services را كليك كنيد. شكل 1 پنجره مربوط به سرويس‌ها را نشان مي‌دهد.

Only the registered members can see the link
شکل 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 را كه ساخته‌ايم، نشان مي‌دهد.

Only the registered members can see the link
شکل 2

هر يك از مشخصه‌هاي اين سرويس را كه بخواهيم، مي توانيم در اين قسمت تغيير دهيم. براي افزودن قابليت جديد به برنامه سرويس ويندوزي كه درست كرده‌ايم، بايد متدهاي OnStart و OnStop اين سرويس‌ها را دستكاري كنيم. مثلاً مي‌توانيم بگوييم هر وقت سرويس شروع شد، فايلي متني بسازد و متني را در آن بنويسد و وقتي كه سرويس متوقف شد، فايل متني ديگري بسازد و متني را در آن بنويسد.

Only the registered members can see the link
شکل 3
براي اين كار كدهاي شكل 4 را مي‌نويسيم. حال سرويس ما درست شده است، ولي نمي‌توان آن را اجرا نمود. چون همان‌طور كه قبلاً نيز ذكر شد، سرويس بايد نصب گردد.
پشتيباني سرويس‌هاي ويندوز از ‌Event‌هاي مختلف‌

سرويس‌هاي ويندوز از چهار Event مختلف پشتيباني مي‌كنند:

˜ Start: وقتي سرويس با استفاده از ‌SCM شروع به كار كرد، Event سرويس Start مي‌شود و سيستم فايل اجرايي را مشخص كرده و متد OnStart برنامه اصلي را اجرا مي‌كند.
˜‌ Stop: وقتي كه سرويس متوقف مي‌گردد.
˜‌ Pause: توقف موقت سرويس
˜ Continue: ادامه كار سرويس

يك سرويس ويندوز مي‌تواند كارهاي زيادي انجام دهد و Eventهاي مختلفي را كنترل نمايد. مثلاً تغيير در قدرت دستگاه را پيدا كند و Log كردن اطلاعاتي مانند تغيير در موقعيت سرويس‌ها را انجام دهد.

همچنين مي‌توان كارايي سيستم را با استفاده از Performance Counters چك نمود. براي اين‌كه بتوانيم اتفاقاتي كه در سيستم پيش مي‌آيد را جمع‌آوري كنيم و به قول معروف Log كنيم، مي‌توانيم از System Event log استفاده كنيم.

با استفاده از اين لوگ‌ها مي‌توانيم اطلاعاتي مانند خرابي سرويس‌ها، كمبود حافظه سيستم يا توقف سرويس‌ها در دست را داشته باشيم. براي استفاده از اين ابزار مي‌توانيم كامپوننت EventLog براي ثبت اطلاعات استفاده كنيم.

Only the registered members can see the link
شکل 4

مثلاً مي‌توانيم با استفاده از متد WriteEntry در EventLog اتفاقات را در سرويس خود ثبت كنيد. به عنوان مثال كد زير به EventLog مي‌گويد كه سرويس مورد نظر شروع شده است:

("this.eventLog1.WriteEntry ("Service 1 started

Only the registered members can see the link
شکل 5
يكي ديگر از ابزارهايي كه مي‌توانيم در سرويس‌هاي ويندوز از آن استفاده كنيم، 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 انتخاب نماييد.

Only the registered members can see the link
شکل 6

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

Only the registered members can see the link
شکل 7
Only the registered members can see the link
شکل 8


كنترل سرويس ويندوز به كمك دات‌نت‌

Service Control Manager) SCM) در واقع چند كار انجام مي‌دهد:

÷‌ تغيير حالت سرويس
÷‌ تعيين چگونگي شروع يك سرويس
÷‌ تعيين وضعيت برگشت سرويس (در صورتي كه نتوانست كار كند).
÷‌ تعيين كاربر براي آن سرويس‌
÷‌ نمايش سرويس‌هاي وابسته به سرويس‌

دات‌نت با ارايه كلاس ServiceController كارهاي SCM را انجام مي‌دهد. جدول 1 متدهاي اين كلاس را به همراه كارايي هر يك نشان مي‌دهد:

Only the registered members can see the link
شکل 9


کارايي

نام متد
قطع ارتباط نمونه کلاس ServiceController از سرويس و بازگرداندن منابع

Close
ادامه کار سرويس پس از توقف يا pause

Continue
اجراي دستورات خاص در يک سرويس

ExecuterCommand
توقف موقت سرويس

Pause
بازآوري اطلاعات سرويس

Refresh
شروع به کار سرويس

Start
متوقف کردن سرويس

Stop

جدول 1

براي كنترل كردن سرويس‌ها بايد از طريق برنامه‌هاي خود اين كار را انجام دهيم. مثلاً براي كنترل سرويس Service1كه به تازگي ساختيم، يك برنامه Windows مي‌سازيم و از قسمت Service Explorer، نام دستگاه، قسمت سرويس‌ها را انتخاب مي‌كنيم و Service1 را به داخل فرم ويندوز خود مي‌آوريم و با كمك دو دكمه همان‌طور كه در شكل 9 مشاهده مي‌كنيد، مي‌توانيم سرويس را راه‌اندازي يا متوقف نماييم.




عصر شبکه