این سایت برای ie9 طراحی نشده است

لطفا دستگاه خود را بچرخانید.

ساخت Windows Service در Net.

۳ آبان ۱۳۹۴ نگین ربیعی
بدون دیدگاه

در این مقاله می خواهیم با Windows Service ها آشنا بشیم و ساخت اونها رو یاد بگیریم.

مقدمه:

سرویس های ویندوز نوعی windows Service هستند که در فضای جداگانه ای و هنگام بارگزاری ویندوز اجرا می شن . معمولا برای انجام عملیات دوره ای در زمان های پی در پی از این سرویس ها به کمک یک Timer استفاده می شه. windows service ها، واسط کاربری ندارد یعنی در پشت پرده در حال اجران و اگر کاربران دیگر که از سیستمی که سرویس بر روی آن در حال اجراست ،  استفاده کنند بدون مراجعه به قسمت سرویس ها متوجه اجرای سرویس نمیشن.

ساخت Windows Service دو مرحله دارد:

۱- ایجاد ویندوز سرویس (Windows Service)

۲- ایجاد Installer ویندوز سرویس (Windows Service Installer)

ایجاد ویندوز سرویس (Windows Service) 

برای اضافه کردن یک Windows Service نرم افزار Visual Studio.NET راباز می کنیم و سپس وارد منوی File > New > Project میشم ،از آیتم های سمت چپ زبان مورد نظرمون رو انتخاب می کنیم (#Visual C یا Visual Basic) کرده و + را کلیک می کنیم  تا شاخه مربوط باز بشه ، آیتم Windows را انتخاب می کنیم و سپس از سمت راست گزینه Windows Service را انتخاب می کنیم ، یک نام دلخواه برای آن انتخاب می کنیم  و دکمه OK را کلیک کرده تا پروژه مورد نظرمون ایجاد بشه  .

S1

به صورت پیش فرض یک آیتم به نام Service1 در Solution Explorer وجود داره ،برای جلو گیری از بروز اشتباه زمان اجرای این سرویس نام Service1 را تغییر میدیم (با فشردن  Ctrl+Shift+F) سپس بر رویService1 در قسمت  Solution Explorer کلیک می کنیم و در properties ، نام را در آنجا نیز تغییر می دیم .

windows service دارای رویداد های  OnStart,OnStop است و در زمان شروع سرویس وارد تابع OnStart و در زمان اتمام کار وارد OnStop می شه.

s2

ما قصد داریم یک سرویس ایجاد کنیم که در زمان های متوالی یک سری اعمال را انجام بده ، بنابراین به یک تایمر نیاز داریم ، برای اضافه کردن تایمر به صورت زیر عمل می کنیم :

یک متغیر از نوع Timer به پروژه اضافه می کنیم

System.Timers.Timer myTimer = new System.Timers.Timer();

در رویداد OnStart ابتدا تایمر را فعال می کنیم و سپس مقدار Interval(برحسب میلی ثانیه ) را تعیین می کنیم ، و سپس رویداد اجرا شدن هر دوره را به Timer نسبت می دیم.

protected override void OnStart(string[] args)

{

myTimer.Interval = 1000;

myTimer.Enabled = true;

myTimer.Elapsed += new System.Timers.ElapsedEventHandler(mainThread);

}

در متد mainThread عملی که می خواهیم انجام بشه را قرار می دیم .

  void mainThread(object sender, System.Timers.ElapsedEventArgs e)
 {
 // do anything
 }

و در انتها در رویداد onStop تایمر را غیر فعال می کنیم .

myTimer.Stop();

 ۲- ایجاد Installer ویندوز سرویس (Windows Service Installer)

قدم بعدی ایجاد installer برای سرویس مورد نظر ماست . بر روی نام سرویس کلیک می کنیم و در قسمت Designer آن راست کلیک کرده و بعد Add installers را کلیک می کنیم .

s3

به صورت خودکار یک آیتم به نام ProjectInstaller  به صفحه اضافه خواهد شد که داخل آن دو شی serviceProcessInstaller1 و serviceInstaller1  قرار داره .

روی شی ProccessInstaller کلیک راست کرده و گزینه Properties را انتخاب می کنیم ، خاصیت Account را به LocalSytem تغییر میدیم.

روی شی serviceInstaller1  کلیک راست کرده و گزینه Properties را انتخاب می کنیم ، خاصیت StartType را Automatic قرار میدیم. هم چنین به DisplayName نام سرویسمان را میدیم (این نام در Services برای ما نشان داده می شه).

پروژه را  Save کرده وآنرا  Rebuild می کنیم.

تنظیمات Installer هم تمام شد زمان نصب فرا رسیده .

نصب WindowsService

بر روی پروژه کلیک راست می کنیم و Open folder in file explorer را می زنیم  به bin>Debug می رویم . در این قسمت یک فایل exe میبینیم مسیر این فایل را کپی میکنیم.

حال Programs => Microsoft Visual Studio 2013 => Visual Studio Tools => Visual Studio Command Prompt را بصورت (Run as administrator) اجرا می کنیم.

آدرسی که در قسمت قبل کپی کرده بودیم را جایگذاری می کنیم و سپس دستور زیر را در ادامه می نویسیم.

installutil.exe WindowsServiceTimer.exe

s4

پس از اجرای این دستور ، سرویس ما  نصب می شه.

s5

ما می توانیم سرویسی که ایجاد کردیم رو در Services که در C:\Windows\system32 وجود دارد را ببینیم .

s6 برای اجرای این سرویس کافیست روی سرویس راست کلیک کرده و سرویس را start کنیم هم چنین  میتوانیم برای غیر فعال کردن این سرویس با کلیک راست کردن و انتخاب Stop ، سرویس را غیر فعال کنیم. برای حذف و uninstall کردن این سرویس باید دستور زیر را در مسیر پروژه اجرا کنیم .

installutil.exe /u WindowServiceTimer.exe