PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزشی چگونه يك سرويس ويندوز بسازيم؟



MAHDIAR
1st May 2010, 01:35 PM
اشاره :
سرويس هاي ويندوز به ما امكان اجراي رويه‌هايي در پس‌زمينه يا Background سيستم را مي‌دهد. با كمك سرويس‌هاي ويندوز مي‌توانيم تكاليفي مانند كنترل استفاده از پايگاه‌داده را انجام دهيم. قابل توجه اين‌كه، سرويس‌هاي ويندوز در فضاي مخصوص به خود اجرا مي‌شوند و به فعاليت ادامه مي‌دهند تا كاربر يا كامپيوتر آن سرويس را غير فعال يا به اصطلاح خاموش كند. اين مقاله ابتدا در مورد سرويس‌هاي ويندوز بحث خواهد كرد. سپس چگونگي ساخت سرويس‌هاي ويندوز در دات‌نت آموزش داده خواهد شد و چگونگي كنترل كردن Log و Eventها در اين برنامه‌ها مورد بررسي قرار خواهد گرفت. پس از آن، روش نصب ويندور سرويس‌ها نشان داده خواهد شد و چگونگي مديريت آن‌ها مورد بررسي قرار خواهد گرفت.


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

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

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

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


شکل 1
http://www.shabakeh-mag.com/Data/Gallery/2008/2/s78_Windows01_s.jpg

سرويس ويندوز كه در رجيستري نصب مي‌شود، يك شيء اجرا شدني است و توسط مدير كنترل سرويس‌ها يا‌ 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 را كه ساخته‌ايم، نشان مي‌دهد.
http://www.shabakeh-mag.com/Data/Gallery/2008/2/s78_Windows02_s.jpg

MAHDIAR
1st May 2010, 01:37 PM
هر يك از مشخصه‌هاي اين سرويس را كه بخواهيم، مي توانيم در اين قسمت تغيير دهيم. براي افزودن قابليت جديد به برنامه سرويس ويندوزي كه درست كرده‌ايم، بايد متدهاي OnStart و OnStop اين سرويس‌ها را دستكاري كنيم. مثلاً مي‌توانيم بگوييم هر وقت سرويس شروع شد، فايلي متني بسازد و متني را در آن بنويسد و وقتي كه سرويس متوقف شد، فايل متني ديگري بسازد و متني را در آن بنويسد.


شکل 3

براي اين كار كدهاي شكل 4 را مي‌نويسيم. حال سرويس ما درست شده است، ولي نمي‌توان آن را اجرا نمود. چون همان‌طور كه قبلاً نيز ذكر شد، سرويس بايد نصب گردد.http://www.shabakeh-mag.com/Data/Gallery/2008/2/s78_Windows03_s.jpg
شتيباني سرويس‌هاي ويندوز از ‌Event‌هاي مختلف‌

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

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

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

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

با استفاده از اين لوگ‌ها مي‌توانيم اطلاعاتي مانند خرابي سرويس‌ها، كمبود حافظه سيستم يا توقف سرويس‌ها در دست را داشته باشيم. براي استفاده از اين ابزار مي‌توانيم كامپوننت EventLog براي ثبت اطلاعات استفاده كنيم.[
IMG]http://www.shabakeh-mag.com/Data/Gallery/2008/2/s78_Windows03_s.jpg[/IMG]
http://www.shabakeh-mag.com/Data/Gallery/2008/2/s78_Windows04_s.jpg

MAHDIAR
1st May 2010, 01:38 PM
مثلاً مي‌توانيم با استفاده از متد WriteEntry در EventLog اتفاقات را در سرويس خود ثبت كنيد. به عنوان مثال كد زير به EventLog مي‌گويد كه سرويس مورد نظر شروع شده است:

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


شکل 5http://www.shabakeh-mag.com/Data/Gallery/2008/2/s78_Windows05_s.jpg

يكي ديگر از ابزارهايي كه مي‌توانيم در سرويس‌هاي ويندوز از آن استفاده كنيم، 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 انتخاب نماييد.
http://www.shabakeh-mag.com/Data/Gallery/2008/2/s78_Windows06_s.jpg

MAHDIAR
1st May 2010, 01:39 PM
بعد از اين‌ كار پروژه را كامپايل نماييد. اگر اشكالي در برنامه شما نباشد، سيستم به شما اعلان مي‌كند كه فايل اجرايي پروژه را نصب كنيد. براي نصب اين فايل اجرايي به Visual Studio 2005 Command Prompt برويد و مطابق شكل 7 دستور installutil را به همراه نام فايل و مسير آن اجرا نماييد تا سرويس مورد نظر ساخته شود (شكل 8). براي حذف سرويس مي‌توانيد از همان دستور، ولي به صورت installutil /u استفاده كنيد.
http://www.shabakeh-mag.com/Data/Gallery/2008/2/s78_Windows07-8_s.jpg
http://www.shabakeh-mag.com/Data/Gallery/s78_Windows07-8_s.jpg

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

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

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

دات‌نت با ارايه كلاس ServiceController كارهاي SCM را انجام مي‌دهد. جدول 1 متدهاي اين كلاس را به همراه كارايي هر يك نشان مي‌دهد:http://www.shabakeh-mag.com/Data/Gallery/2008/2/s78_Windows09_s.jpg

MAHDIAR
1st May 2010, 01:40 PM
کارايي

نام متد

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

Close

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

Continue

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

ExecuterCommand

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

Pause

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

Refresh

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

Start

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

Stop

جدول 1

MAHDIAR
1st May 2010, 01:41 PM
کارايي

نام متد

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

Close

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

Continue

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

ExecuterCommand

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

Pause

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

Refresh

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

Start

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

Stop

جدول 1

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد