ایجاد Windows Services در #C

جمعه 3 مهر 1394

در این مقاله می خواهیم در مورد Windows Services در NET FrameWork. صحبت کنیم . در این مقاله می خواهیم هدف از ساخت Windows Services را یاد بگیریم و علاوه بر آن در مورد چگونگی ساخت یک Windows Services در NET FrameWork. صحبت کنیم

ایجاد Windows Services در #C

هدف از ساخت Windows Servicesدر #C:

1-اگر شما نیاز به اجرای یک کاربر روی سرور به صورت روزانه در یک زمان مشخص بدون تعامل کاربر داشتید می توانید از Windows Services استفاده نمایید.

2-برای انجام وظیفه های که مربوط به Backup هست شما می توانید از Windows Services استفاده نمایید.

3-برای انجام وظیفه هایی که مربوط به نظارت(monitoring) از Windows Services می توانید استفاده کنید.

4-با استفاده از Windows Services شما می توانید برنامه های روزانه خود را مثل ارسال ایمیل، یا ایجاد یک فایل ویا ... را در یک زمان خاص انجام دهید.

Windows Services در پس زمینه اجرا می شوند مثل SQL Server Agent service و برخی از antivirus services

برای ساخت یک Windows Services مراحل زیر را انجام دهید:

قدم اول:

وارد Visual Studio شوید و روی گزینه ی “File” -> ”New” -> ”Project...” انتخاب نمایید.به صورت زیر:

مرحله دوم:

به آدرس Visual C# -> ”Windows” -> ”Windows Service” بروید و گزینه ی OK را بزنید:

قدم سوم:

بعد از اجرای پروژه تصویر زیر را خواهید دید:

طراحی این قسمت به گونه ای است که هر چیزی را که کاربر نیاز داشت می تواند با کشیدن و رها کردن آن را داخل صفحه داشته باشد.

قدم چهارم:

زمانی که وارد صفحه ی کد بروید شما دو متد OnStart ,OnStop را خواهید دید :

OnStart Method

OnStart Method:در این متد کدهایی را که می خواهید زمانی که Service شروع شود را اجرا کند می گذارید.

OnStop Method:در ایم متد کدهایی را که می خواهید زمانی که Service متوقف شود را اجرا کند می گذارید.

قدم پنجم:

می خواهیم دو روش برای کپی کردن یک فایل اکسل از یک محل دیسک به محل دیگر دیسک برود.

همه ی این روش ها با استفاده از متد OnStart استفاده می شود:

1-Copy_Excelfile_And_Paste_at_anotherloaction_OnServiceStart:هدف از این روش کپی کردن یک فایل اکسل از یک محل ذخیره شده به یک محل دیگر

2-Create_ErrorFile:این روش خطاهایی را که در هنگام کپی رخ می دهد را حفظ می نماید.

/// </summary>
/// The purpose of this method is to copy Excel sheet from one location to another location at specified time period.  
/// </summary>  
public static void Copy_Excelfile_And_Paste_at_anotherloaction()  
{  
    try  
    {  
        string source = "D:\\DemoWebservice";  
        string Destination = "D:\\DemoWebservice\\ExcelSheetCollection";  
        string filename = string.Empty;  
        if (!(Directory.Exists(Destination) && Directory.Exists(source)))  
            return;  
        string[] Templateexcelfile = Directory.GetFiles(source);  
        foreach (string file in Templateexcelfile)  
        {  
            if (Templateexcelfile[0].Contains("Template"))  
            {  
                filename = System.IO.Path.GetFileName(file);  
                Destination = System.IO.Path.Combine(Destination, filename.Replace(".xlsx", DateTime.Now.ToString("yyyyMMdd")) + ".xlsx");  
                System.IO.File.Copy(file, Destination, true);  
            }  
        }  
  
    }  
    catch (Exception ex)  
    {  
        Create_ErrorFile(ex);  
    }  
  
}  
/// <summary>  
/// purpose of this method is to maintain error log in text file.  
/// </summary>  
/// <param name="exx"></param>  
public static void Create_ErrorFile(Exception exx)  
{  
    StreamWriter SW;  
    if (!File.Exists(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "txt_" + DateTime.Now.ToString("yyyyMMdd") + ".txt")))  
    {  
        SW = File.CreateText(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "txt_" + DateTime.Now.ToString("yyyyMMdd") + ".txt"));  
        SW.Close();  
    }  
    using (SW = File.AppendText(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "txt_" + DateTime.Now.ToString("yyyyMMdd") + ".txt")))  
    {  
        string[] str = new string[] { exx.Message==null?"":exx.Message.ToString(), exx.StackTrace==null?"":exx.StackTrace.ToString(),  
            exx.InnerException==null?"":exx.InnerException.ToString()};  
        for (int i = 0; i < str.Length; i++)  
        {  
            SW.Write("\r\n\n");  
            if (str[i] == str[0])  
                SW.WriteLine("Exception Message:" + str[i]);  
            else if (str[i] == str[1])  
                SW.WriteLine("StackTrace:" + str[i]);  
            else if (str[i] == str[2])  
                SW.WriteLine("InnerException:" + str[i]);}  
          
        SW.Close();  
    }  
}

حالا برای متد OnStop کد زیر را می نویسیم:

1- Create_ServiceStoptextfile:این روش زمان توقف service را در یک فایل متنی حفظ می کند.

    /// </summary>
    /// The purpose of this method is maintain service stop information in text file.  
    /// </summary>  
    public static void Create_ServiceStoptextfile()  
    {  
        string Destination = "D:\\DemoWebservice\\ServiceStopInforation";  
        StreamWriter SW;  
        if (Directory.Exists(Destination))  
        {  
            Destination = System.IO.Path.Combine(Destination, "txtServiceStop_" + DateTime.Now.ToString("yyyyMMdd") + ".txt");  
            if (!File.Exists(Destination))  
            {  
                SW = File.CreateText(Destination);  
                SW.Close();  
            }  
        }  
        using (SW = File.AppendText(Destination))  
        {  
            SW.Write("\r\n\n");  
            SW.WriteLine("Service Stopped at: " + DateTime.Now.ToString("dd-MM-yyyy H:mm:ss"));  
            SW.Close();  
        }  
    }  

سپس متد هایی را که نوشتیم داخل OnStartو OnStop صدا می زنیم.

/// </summary>
/// OnStart Method write code if we want to execute code when service is started.  
/// </summary>  
/// <param name="args"></param>  
protected override void OnStart(string[] args)  
{  
    int hour = DateTime.Now.Hour;  
    int minute = DateTime.Now.Minute;  
    if (hour == 12 && minute == 40)  
    {  
        Copy_Excelfile_And_Paste_at_anotherloaction_OnServiceStart();  
    }  
  
}  
/// <summary>  
/// OnStop Method write code if we want to execute the particular code when service is Stop.  
/// </summary>  
/// <param name="args"></param>  
protected override void OnStop()  
{  
    Create_ServiceStoptextfile();  
} 

قدم ششم:سپش به پنجره خدمات بروید و راست کلیک کنید و گزینه ی Add Installer را انتخاب کنید.

روی ServiceInstaller1راست کلیک کنید و گزینه ی Properties را انتخاب کنید.

نا

نام Service را تغییر بدهید و گزینه ی StartType را روی Manual قرار دهید.

روی serviceProcessInstaller1 راست کلیک کنید و گزینه ی Properties را انتخاب کنید.

نوع Account را به LocalSystem تغییر دهید.

سپس پروژه خود را یک بار Rebuild کنید.

بعد از اینکه با موفقیت Build شد حالا نیاز به نصب Windows Service دارید.

مرحله هفتم:

نصب Service:

به صورت تصویر زیر Visual Studio 2012 command promt را اجرا کنید

محل نصب فایل exe windows service را می نویسید به صورت زیر:

installutil D:\Demo\DemoWindoserviceBlog\DemoWindoserviceBlog\bin\Debug\DemoWindoserviceBlog.exe

پس از نصب موفق آمیز با پیغام زیر روبرو خواهید شد:

به آدرس تصویر زیر بروید:

سپس در منوی Services And Application به منوی Services بروید:

حالا

حالا Service نصب شده را می توانید ببینید:

حال با زدن شروع می توانید از Service خود استفاده کنید و با راست کلیک کردن و زدن گزینه ی Properties می توانید شروع را به صورت اتوماتیک تغییر بدهید.

با تغییر StartUp  وزدن Ok تنظیمات ذخیره می شود.

خروجی به صورت زیر خواهد بود:

برای قسمت Service Stop هم یک فایل متنی نوشته شده است که زمان های توقف سرویس وجود دارد.

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 3 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید