اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
در ویژوال استودیو، قالب پروژه ایجاد سرویسهای ویندوز ان تی از پیش تدارک دیده شده است؛ اما کار کردن با آن ساده نیست به علاوه امکان دیباگ این نوع سرویسها نیز به صورت پیش فرض درنظر گرفته نشده است و نیاز به تمهیدات و نکات خاصی دارد. جهت سهولت ایجاد سرویسهای ویندوز ان تی، کتابخانهای به نام TopShelf ایجاد شده است که یک برنامه ویندوزی را به سادگی تبدیل به یک سرویس ویندوز ان تی میکند. در ادامه جزئیات نحوه استفاده از آنرا مرور خواهیم کرد.
الف) دریافت TopShelf
TopShelf یک کتابخانه سورس باز است و علاوه بر آن، آخرین فایلهای باینری آنرا از طریق نیوگت نیز میتوان دریافت کرد:
ب) فعال سازی TopShelf
یک برنامه ساده کنسول را ایجاد کنید. سپس با استفاده از نیوگت و اجرای فرمان فوق، ارجاعی را به اسمبلی TopShelf اضافه نمائید.
کدهای آغازین کار با TopShelf همین چندسطر فوق هستند. در آن وهلهای از کلاس سرویس مشتق شده از ServiceControl را دریافت کرده و سپس نام سرویس و سطح دسترسی اجرای آن مشخص میشوند. EnableServiceRecovery مربوط به حالتی است که سرویس کرش کرده است و ویندوز این قابلیت را دارد تا یک سرویس را به صورت خودکار راه اندازی مجدد کنند.
در اینجا امضای کلی کلاس سرویس را مشاهده میکند که میتواند شامل چهار متد استاندارد آغاز، پایان، مکث و ادامه باشد.
ج) نصب TopShelf
در همین حالت اگر برنامه را اجرا کنید، سرویس ویندوز ان تی تهیه شده، شروع به کار خواهد کرد (مزیت مهم آن نسبت به قالب توکار تهیه سرویسهای ویندوز در ویژوال استودیو).
برای نصب این سرویس تنها کافی است در خط فرمان با دسترسی مدیریتی، دستور نصب your_exe install و یا عزل your_exe uninstall صادر شوند.
الف) دریافت TopShelf
TopShelf یک کتابخانه سورس باز است و علاوه بر آن، آخرین فایلهای باینری آنرا از طریق نیوگت نیز میتوان دریافت کرد:
PM> Install-Package Topshelf
ب) فعال سازی TopShelf
یک برنامه ساده کنسول را ایجاد کنید. سپس با استفاده از نیوگت و اجرای فرمان فوق، ارجاعی را به اسمبلی TopShelf اضافه نمائید.
using Topshelf; namespace MyService { class Program { static void Main(string[] args) { HostFactory.Run(config => { config.Service(settings => new TestService()); config.EnableServiceRecovery(recovery => recovery.RestartService(delayInMinutes: 1)); config.EnableShutdown(); config.EnablePauseAndContinue(); config.SetDescription("MyService Desc."); config.SetDisplayName("MyService"); config.SetServiceName("MyService"); config.RunAsLocalSystem(); }); } } }
using Topshelf; using Topshelf.Logging; namespace MyService { public class TestService : ServiceControl { static readonly LogWriter _log = HostLogger.Get<TestService>(); public bool Start(HostControl hostControl) { _log.Info("TestService Starting..."); return true; } public bool Stop(HostControl hostControl) { _log.Info("TestService Stopped"); return true; } public bool Pause(HostControl hostControl) { _log.Info("TestService Paused"); return true; } public bool Continue(HostControl hostControl) { _log.Info("TestService Continued"); return true; } } }
ج) نصب TopShelf
در همین حالت اگر برنامه را اجرا کنید، سرویس ویندوز ان تی تهیه شده، شروع به کار خواهد کرد (مزیت مهم آن نسبت به قالب توکار تهیه سرویسهای ویندوز در ویژوال استودیو).
برای نصب این سرویس تنها کافی است در خط فرمان با دسترسی مدیریتی، دستور نصب your_exe install و یا عزل your_exe uninstall صادر شوند.