وباکا

آموزش تخصصی برنامه نویسی وب

چگونه با استفاده از سی شارپ یک سرویس ویندوز ایجاد کنیم؟

سی شارپ

سرویس های ویندوز برنامه های نرم افزاری بدون رابط کاربری هستند که در پس زمینه اجرا می شوند. سرویس‌های ویندوز معمولاً زمانی شروع می‌شوند که یک سیستم عامل بوت می‌شود و برنامه‌ریزی شده است تا در پس‌زمینه اجرا شد و برخی وظایف را انجام دهد. سرویس های ویندوز همچنین می توانند به صورت خودکار یا دستی راه اندازی شوند. همچنین می توانید به صورت دستی سرویس های ویندوز را متوقف، متوقف و راه اندازی مجدد کنید.

سرویس ویندوز یک برنامه کامپیوتری است که در پس زمینه اجرا می شود تا برخی از وظایف را انجام دهد. برخی از نمونه‌های سرویس‌های ویندوز عبارتند از: به‌روزرسانی خودکار ویندوز، بررسی ایمیل‌ها، چاپ اسناد، عامل SQL Server، اسکن و فهرست‌بندی فایل‌ها و پوشه‌ها و غیره. اگر Task Manager خود را باز کنید و روی تب Services کلیک کنید، صدها سرویس را مشاهده خواهید کرد که در دستگاه شما در حال اجرا هستند. همچنین می توانید وضعیت این سرویس ها را مشاهده کنید. برخی از سرویس ها در حال اجرا هستند، برخی متوقف شده اند و برخی دیگر متوقف شده اند. از اینجا می توانید با کلیک راست بر روی سرویس، یک سرویس را شروع، متوقف و مکث کنید.

وب سرویس در سی شارپ

همچنین می‌توانید تمام سرویس‌های در حال اجرا بر روی دستگاه خود را به روش‌های زیر بیابید:
  • به کنترل پنل بروید، “services” را در داخل “Administrative Tools انتخاب کنید.
  • پنجره Run (Window + R) را باز کرده و services.msc را تایپ کرده و ENTER را فشار دهید.

چگونه یک سرویس ویندوز در سی شارپ ایجاد کنیم؟

در ادامه با استفاده از ویژوال استودیو یک سرویس ویندوز در سی شارپ ایجاد می کنیم.
مرحله 1
Visual Studio را باز کنید، به File > New بروید و Project را انتخاب کنید. اکنون یک پروژه جدید را از کادر گفتگو انتخاب کنید و “Window Service” را انتخاب کنید و روی دکمه OK کلیک کنید.
create-windows-sevice-in-csharp

گام 2

به Visual C# -> “Windows Desktop” -> “Windows Service” بروید و یک نام مناسب بدهید و سپس روی OK کلیک کنید.

add-service-project-in-csharp
پس از کلیک بر روی دکمه OK صفحه زیر ظاهر می شود :
new windows service project

مرحله 3

بر روی قسمت خالی کلیک راست کرده و “Add Installer” را انتخاب کنید.

نحوه اضافه کردن نصب کننده به سرویس ویندوز

قبل از اینکه بتوانید یک سرویس ویندوز را اجرا کنید، باید Installer را نصب کنید، که آن را در Service Control Manager ثبت کند.
add service installer
پس از افزودن Installer، ProjectInstaller به پروژه شما اضافه می کند و فایل ProjectInstakker.cs باز می شود. فراموش نکنید که همه چیز را ذخیره کنید (با فشار دادن کلیدهای ctrl + shift + s)
حالا می بینید که Solution Explore به شکل زیر است:
solution explorer

مرحله 4

روی قسمت خالی کلیک راست کرده و “View Code” را انتخاب کنید.

installer view code
مرحله 5

کلاس Installer دارای سازنده ای است که حاوی متد InitializeComponent است:

متد InitializeComponent حاوی منطقی است که اشیاء رابط کاربری کشیده شده روی سطح شکل‌دهی را ایجاد و مقداردهی اولیه می‌کند و عناصر بخش ویژوال فرم را ایجاد می کند.
خیلی مهم: هرگز سعی نکنید قبل از فراخوانی متد InitializeComponent هیچ متدی را فراخوانی کنید.
initial component

مرحله 6

پیاده سازی متد InitializeComponent پیدا کنید. (برای این کار پس از انتخاب نام تابع کلید F12 را فشار دهید)

مرحله 7

حالا خط زیر را اضافه کنید:

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
همچنین می توانید توضیحات و نمایش نام سرویس را اضافه کنید (اختیاری).

this .serviceInstaller1.Description =  “نمونه نمایشی اولین سرویس من” ;

this .serviceInstaller1.DisplayName =  “MyFirstService.Demo” ;

window-service-installer

نگران نباشید! کد کامل این برنامه را در زیر می بینید:


namespace koodak_service
{
partial class ProjectInstaller
{
///
/// Required designer variable.
///private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
//////true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///private void InitializeComponent()
{
this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
//..................
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.serviceInstaller1.Description = "Kodakam updater";
this.serviceInstaller1.DisplayName = "Kodakam";
//
// serviceProcessInstaller1
//
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.Username = null;
//
// serviceInstaller1
//
this.serviceInstaller1.ServiceName = "Service1";
//
// ProjectInstaller
//
this.Installers.AddRange(new System.Configuration.Install.Installer[] {
this.serviceProcessInstaller1,
this.serviceInstaller1});
}
#endregion
private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
private System.ServiceProcess.ServiceInstaller serviceInstaller1;
}
}

مرحله 8

در این مرحله تایمر و کدی را برای فراخوانی سرویس در زمان معین پیاده سازی می کنیم. ما یک فایل متنی ایجاد می کنیم و با استفاده از سرویس، زمان جاری را در فایل متنی می نویسیم.

Add timer to win service

پیاده سازی کامل کلاس Service1.cs را در زیر می بینید:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.IO;
namespace koodak_service
{
public partial class Service1 : ServiceBase
{
Timer timer = new Timer();
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
WriteToFile(“Service is started at ” + DateTime.Now);
timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
timer.Interval = 60*60*1000; //number in milisecinds
timer.Enabled = true;
}
protected override void OnStop()
{
WriteToFile(“Service is stopped at ” + DateTime.Now);
}
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
WriteToFile(“Service is recall at ” + DateTime.Now);
}
public void WriteToFile(string Message)
{
string path = AppDomain.CurrentDomain.BaseDirectory + “\\Logs”;
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string filepath = AppDomain.CurrentDomain.BaseDirectory + “\\Logs\\ServiceLog_” + DateTime.Now.Date.ToShortDateString().Replace(‘/’, ‘_’) + “.txt”;
if (!File.Exists(filepath))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(filepath))
{
sw.WriteLine(Message);
}
}
else
{
using (StreamWriter sw = File.AppendText(filepath))
{
sw.WriteLine(Message);
}
}
}
}
}

توضیح کد – کد بالا هر 5 ثانیه یکبار با سرویس تماس می گیرد و در صورت وجود پوشه ای ایجاد می کند و پیام ما را می نویسد.
مرحله 9. برنامه خود را دوباره بسازید.
برای این منظور روی پروژه یا راه حل خود کلیک راست کرده و Rebuild را انتخاب کنید.
rebuild project

مرحله 10

“Command Prompt” را جستجو کنید و به حتماً به عنوان مدیر اجرا کنید ( یعنی روی آن کلیک راست کرده و گزینه Run as Administrator را اجرا کنید)

run as administrator

مرحله 11

دستور زیر را در خط فرمان اجرا کنید و ENTER را فشار دهید. (البته مسیر زیر بستگی به نسخه ویندوز شما دارد)

cd  C:\Windows\Microsoft.NET\Framework\v4.0.30319
command prompt

مرحله 12

حالا به پوشه منبع پروژه خود و bin > Debug رفته و مسیر کامل فایل اجرایی ساخته شده خود را کپی کنید.

project path

نصب سرویس ویندوز

به پنجره Command prompt  که قبلا را باز کرده بروید و دستور زیر را اجرا کنید و ENTER را فشار دهید.

نحو

InstallUtil.exe + مسیر کپی شده + \نام سرویس شما + exe

مسیر ما

InstallUtil.exe C:\Users\Faisal-Pathan\source\repos\MyFirstService\MyFirstService\bin\Debug\MyFirstService.exe

install service in windows

چگونه وضعیت سرویس ویندوز را بررسی کنید

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

  1. کلید Window + R را فشار دهید.
  2. Services.msc را تایپ کنید
  3. سرویس خود را پیدا کنید

windows services

در این لیست می تونید سرویس جدید را پیدا کرده، آن را شروع به کار، متوقف یا دوباره راه اندازی کنید.

 

خروجی سرویس ویندوز را بررسی کنید

برای مشاهده فایل ثبت وقایع می تونید فایل موجود در زیر پوشه Log  در کنار فایل اجرایی سرویس را باز کنید.

پوشه log در پوشه bin شما ایجاد می شود.
log-file

حذف نصب سرویس ویندوز

اگر می خواهید سرویس خود را حذف کنید، دستور زیر را اجرا کنید.

syntax: InstallUtil.exe -u + مسیر کپی شده شما + نام سرویس شما + exe.

مسیر ما InstallUtil.exe -u C:\Users\Faisal-Pathan\source\repos\MyFirstService\MyFirstService\bin\Debug\MyFirstService.exe

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

موفق باشید.

منبع : سایت c# corner

دانلود نمونه سرویس ویندوز با سی شارپ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست مطالب