سرویس های ویندوز برنامه های نرم افزاری بدون رابط کاربری هستند که در پس زمینه اجرا می شوند. سرویسهای ویندوز معمولاً زمانی شروع میشوند که یک سیستم عامل بوت میشود و برنامهریزی شده است تا در پسزمینه اجرا شد و برخی وظایف را انجام دهد. سرویس های ویندوز همچنین می توانند به صورت خودکار یا دستی راه اندازی شوند. همچنین می توانید به صورت دستی سرویس های ویندوز را متوقف، متوقف و راه اندازی مجدد کنید.
سرویس ویندوز یک برنامه کامپیوتری است که در پس زمینه اجرا می شود تا برخی از وظایف را انجام دهد. برخی از نمونههای سرویسهای ویندوز عبارتند از: بهروزرسانی خودکار ویندوز، بررسی ایمیلها، چاپ اسناد، عامل SQL Server، اسکن و فهرستبندی فایلها و پوشهها و غیره. اگر Task Manager خود را باز کنید و روی تب Services کلیک کنید، صدها سرویس را مشاهده خواهید کرد که در دستگاه شما در حال اجرا هستند. همچنین می توانید وضعیت این سرویس ها را مشاهده کنید. برخی از سرویس ها در حال اجرا هستند، برخی متوقف شده اند و برخی دیگر متوقف شده اند. از اینجا می توانید با کلیک راست بر روی سرویس، یک سرویس را شروع، متوقف و مکث کنید.
- به کنترل پنل بروید، “services” را در داخل “Administrative Tools انتخاب کنید.
- پنجره Run (Window + R) را باز کرده و services.msc را تایپ کرده و ENTER را فشار دهید.
چگونه یک سرویس ویندوز در سی شارپ ایجاد کنیم؟
![create-windows-sevice-in-csharp](http://blog.webaca.ir/wp-content/uploads/2022/08/create-windows-sevice-in-csharp-300x114.png)
گام 2
به Visual C# -> “Windows Desktop” -> “Windows Service” بروید و یک نام مناسب بدهید و سپس روی OK کلیک کنید.
![add-service-project-in-csharp](http://blog.webaca.ir/wp-content/uploads/2022/08/add-service-project-in-csharp-300x180.png)
![new windows service project](http://blog.webaca.ir/wp-content/uploads/2022/08/new-windows-service-project-300x143.png)
مرحله 3
بر روی قسمت خالی کلیک راست کرده و “Add Installer” را انتخاب کنید.
نحوه اضافه کردن نصب کننده به سرویس ویندوز
![add service installer](http://blog.webaca.ir/wp-content/uploads/2022/08/add-service-installer-300x100.png)
![solution explorer](http://blog.webaca.ir/wp-content/uploads/2022/08/solution-explorer-191x300.png)
مرحله 4
روی قسمت خالی کلیک راست کرده و “View Code” را انتخاب کنید.
![installer view code](http://blog.webaca.ir/wp-content/uploads/2022/08/installer-view-code-300x171.png)
کلاس Installer دارای سازنده ای است که حاوی متد InitializeComponent است:
خیلی مهم: هرگز سعی نکنید قبل از فراخوانی متد InitializeComponent هیچ متدی را فراخوانی کنید.
![initial component](http://blog.webaca.ir/wp-content/uploads/2022/08/initial-component-300x171.png)
مرحله 6
پیاده سازی متد InitializeComponent پیدا کنید. (برای این کار پس از انتخاب نام تابع کلید F12 را فشار دهید)
حالا خط زیر را اضافه کنید:
this .serviceInstaller1.Description = “نمونه نمایشی اولین سرویس من” ;
this .serviceInstaller1.DisplayName = “MyFirstService.Demo” ;
نگران نباشید! کد کامل این برنامه را در زیر می بینید:
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
در این مرحله تایمر و کدی را برای فراخوانی سرویس در زمان معین پیاده سازی می کنیم. ما یک فایل متنی ایجاد می کنیم و با استفاده از سرویس، زمان جاری را در فایل متنی می نویسیم.
پیاده سازی کامل کلاس Service1.cs را در زیر می بینید:
namespace koodak_service
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;
{
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);
}
}
}
}
}
![rebuild project](http://blog.webaca.ir/wp-content/uploads/2022/08/rebuild-project-300x269.png)
مرحله 10
“Command Prompt” را جستجو کنید و به حتماً به عنوان مدیر اجرا کنید ( یعنی روی آن کلیک راست کرده و گزینه Run as Administrator را اجرا کنید)
![run as administrator](http://blog.webaca.ir/wp-content/uploads/2022/08/run-as-administrator-184x300.png)
مرحله 11
دستور زیر را در خط فرمان اجرا کنید و ENTER را فشار دهید. (البته مسیر زیر بستگی به نسخه ویندوز شما دارد)
![command prompt](http://blog.webaca.ir/wp-content/uploads/2022/08/command-prompt-300x65.png)
مرحله 12
حالا به پوشه منبع پروژه خود و bin > Debug رفته و مسیر کامل فایل اجرایی ساخته شده خود را کپی کنید.
![project path](http://blog.webaca.ir/wp-content/uploads/2022/08/project-path-300x66.png)
نصب سرویس ویندوز
به پنجره Command prompt که قبلا را باز کرده بروید و دستور زیر را اجرا کنید و ENTER را فشار دهید.
نحو
InstallUtil.exe + مسیر کپی شده + \نام سرویس شما + exe
مسیر ما
InstallUtil.exe C:\Users\Faisal-Pathan\source\repos\MyFirstService\MyFirstService\bin\Debug\MyFirstService.exe
چگونه وضعیت سرویس ویندوز را بررسی کنید
سرویس ها را با دنبال کردن مراحل زیر باز کنید:
- کلید Window + R را فشار دهید.
- Services.msc را تایپ کنید
- سرویس خود را پیدا کنید
در این لیست می تونید سرویس جدید را پیدا کرده، آن را شروع به کار، متوقف یا دوباره راه اندازی کنید.
خروجی سرویس ویندوز را بررسی کنید
برای مشاهده فایل ثبت وقایع می تونید فایل موجود در زیر پوشه Log در کنار فایل اجرایی سرویس را باز کنید.
![log-file](http://blog.webaca.ir/wp-content/uploads/2022/08/log-file-300x205.png)
حذف نصب سرویس ویندوز
اگر می خواهید سرویس خود را حذف کنید، دستور زیر را اجرا کنید.
syntax: InstallUtil.exe -u + مسیر کپی شده شما + نام سرویس شما + exe.
مسیر ما InstallUtil.exe -u C:\Users\Faisal-Pathan\source\repos\MyFirstService\MyFirstService\bin\Debug\MyFirstService.exe
در این مقاله آموزشی با روش ایجاد، پیاده سازی، نصب و مدیریت سرویس های ویندوز با استفاده از زبان سی شارپ آشنا شدید. در صورتی که در زمان اجرا مشکلی داشتید در کامنت بذارید.
موفق باشید.
منبع : سایت c# corner