دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
کنترل ServiceController در سی شارپ
1404/07/27 -
تریگر (Trigger) در Sql Server
1404/07/27 -
رتبه بندی در sql server با دستور rank
1404/07/26 -
کنترل SerialPort در سی شارپ
1404/07/26 -
کنترل Splitter در سی شارپ
1404/07/25 -
کنترل WebBrowser در سی شارپ
1404/07/24
کنترل ServiceController در سی شارپ

مقدمه
در برنامهنویسی ویندوز، گاهی لازم است بتوانیم سرویسهای سیستم را بهصورت برنامهنویسی شده کنترل کنیم؛ برای مثال سرویسی را که وظیفه خاصی در سیستم دارد، متوقف یا دوباره اجرا کنیم.
در این مواقع، کلاس ServiceController در سیشارپ ابزار اصلی ماست. این کلاس بخشی از فضای نام System.ServiceProcess است و به شما اجازه میدهد از طریق کد، مستقیماً سرویسهای ویندوز را مدیریت کنید.
مفهوم ServiceController در سیشارپ
کلاس ServiceController نماینده یک سرویس ویندوز در محیط .NET است.
این کلاس ارتباط میان برنامه شما و سرویسهای سیستم عامل را برقرار میکند. از طریق آن میتوانید:
- وضعیت فعلی سرویس (Running, Stopped, Paused) را مشاهده کنید؛
- سرویس را متوقف یا راهاندازی کنید؛
- وضعیت آن را تازهسازی (Refresh) کنید؛
- و حتی دستورات سفارشی برای سرویس ارسال نمایید.
به بیان ساده، ServiceController واسطی میان کد شما و مدیریت سرویسهای ویندوز است.
به کمک این کلاس میتوان بدون ورود به پنجره Services ویندوز، عملیات مدیریتی را مستقیماً از داخل برنامه انجام داد.
مزایا و ویژگیهای ServiceController
استفاده از ServiceController در سیشارپ، ابزاری قدرتمند برای کنترل و مدیریت سرویسهای ویندوز از درون برنامه است. این کلاس به توسعهدهندگان اجازه میدهد سرویسها را بهصورت مستقیم، پویا و کاملاً سفارشی مدیریت کنند و از این طریق عملکرد سیستم و برنامه را بهینه سازند.
مهمترین مزایا و ویژگیهای این کلاس عبارتاند از:
1. مدیریت مستقیم سرویسها
امکان شروع، توقف، ادامه یا توقف موقت سرویسها بهصورت برنامهنویسی.
2. افزایش کارایی نرمافزار
با کنترل خودکار سرویسها، از اجرای غیرضروری جلوگیری شده و منابع سیستم بهینهتر مصرف میشوند.
3. قابلیت مانیتورینگ وضعیت سرویسها
برنامه میتواند بهصورت لحظهای بررسی کند که هر سرویس در چه وضعیتی است (Running، Stopped و ...).
4. ارسال دستورات سفارشی
از طریق متد ExecuteCommand میتوان فرمانهای خاص و اختصاصی را به سرویسها ارسال کرد.
5. امنیت و پایداری بالا
کنترل سرویسها از طریق ServiceController در محیط امن و بدون نیاز به اجرای دستی دستورها انجام میشود.
6. کاربرد در نرمافزارهای مدیریتی
بسیاری از ابزارهای حرفهای مدیریت شبکه و سیستم از همین کلاس برای نظارت بر سرویسها استفاده میکنند.
اجزای اصلی کلاس ServiceController
ویژگی | توضیح |
ServiceName | نام داخلی سرویس در ویندوز |
DisplayName | نام نمایشی سرویس |
Status | وضعیت فعلی سرویس (Running, Stopped, Paused) |
CanStop | تعیین میکند آیا سرویس قابل توقف است یا نه |
CanPauseAndContinue | بررسی قابلیت توقف موقت و ادامه سرویس |
()Start | شروع اجرای سرویس |
()Stop | توقف سرویس |
()Pause و ()Continue | تعلیق و ادامه فعالیت سرویس |
ExecuteCommand(int) | ارسال فرمان دلخواه |
()Refresh | تازهسازی وضعیت سرویس |
()GetServices | دریافت لیست تمام سرویسهای نصبشده در سیستم |
مراحل استفاده از ServiceController در پروژه سیشارپ
برای استفاده از این کلاس در پروژه ویندوزی خود، کافی است مراحل زیر را انجام دهید:
1. در Visual Studio یک پروژه جدید از نوع Windows Forms Application یا Console Application ایجاد کنید.
2. به قسمت References بروید و اطمینان حاصل کنید که فضای نام System.ServiceProcess به پروژه افزوده شده است.
3. در ابتدای فایل کد خود بنویسید:
using System.ServiceProcess;
حالا شما آماده استفاده از این کنترل هستید.
ایجاد ServiceController در فرم ویندوزی
یکی از کاربردیترین سناریوها، نمایش و کنترل سرویسها در محیط گرافیکی (WinForms) است.
فرض کنید قصد دارید در فرم خود یک لیست از تمام سرویسها نمایش دهید و امکان شروع و توقف هرکدام را فراهم کنید.
مثال کاربردی
در مثال زیر با استفاده از ListBox و چند دکمه، سرویسها را فهرست کرده و عملیات مدیریتی انجام میدهیم:
using System;
using System.ServiceProcess;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (var service in ServiceController.GetServices())
{
listBox1.Items.Add(service.ServiceName);
}
}
private void btnStart_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItem == null) return;
var svc = new ServiceController(listBox1.SelectedItem.ToString());
if (svc.Status == ServiceControllerStatus.Stopped)
{
svc.Start();
svc.WaitForStatus(ServiceControllerStatus.Running);
MessageBox.Show("Service started successfully!");
}
}
private void btnStop_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItem == null) return;
var svc = new ServiceController(listBox1.SelectedItem.ToString());
if (svc.Status == ServiceControllerStatus.Running && svc.CanStop)
{
svc.Stop();
svc.WaitForStatus(ServiceControllerStatus.Stopped);
MessageBox.Show("Service stopped successfully!");
}
}
private void btnStatus_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItem == null) return;
var svc = new ServiceController(listBox1.SelectedItem.ToString());
MessageBox.Show($"Status: {svc.Status}");
}
}
در این مثال، هر بار که دکمه Start یا Stop را میزنید، برنامه وضعیت سرویس را بررسی کرده و دستور مناسب را اجرا میکند.
این یک نمونه کامل از ایجاد ServiceController در فرم است که در بسیاری از ابزارهای مدیریتی سیستم به کار میرود.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
نحوه ایجاد و حذف سرویسها در سیشارپ
مدیریت سرویسها تنها به کنترل آنها محدود نمیشود؛ در بسیاری از پروژهها لازم است بتوانید سرویسهای جدیدی ایجاد یا سرویسهای غیرضروری را حذف کنید.
در سیشارپ، این کار از طریق ابزارها و کلاسهای اختصاصی بهسادگی قابل انجام است و امکان پیادهسازی فرآیند نصب و حذف خودکار سرویسها را فراهم میکند.
مراحل ایجاد سرویس در سیشارپ
برای ساخت سرویس جدید در ویژوال استودیو:
از منوی File → New → Project گزینهی Windows Service را انتخاب کنید.
2. در کلاس سرویس خود، متدهای OnStart و OnStop را بنویسید تا عملکرد مورد نظر شما را پیادهسازی کنند.
3. سپس باید فایل نصب سرویس را آماده کنید تا بتوان آن را روی سیستم نصب کرد. برای این کار کلاس زیر را به پروژه اضافه کنید:
using System.ComponentModel;
using System.ServiceProcess;
[RunInstaller(true)]
public class MyServiceInstaller : Installer
{
public MyServiceInstaller()
{
ServiceProcessInstaller processInstaller = new ServiceProcessInstaller();
processInstaller.Account = ServiceAccount.LocalSystem;
ServiceInstaller serviceInstaller = new ServiceInstaller();
serviceInstaller.ServiceName = "MySampleService";
serviceInstaller.DisplayName = "My Sample Windows Service";
serviceInstaller.StartType = ServiceStartMode.Manual;
Installers.Add(processInstaller);
Installers.Add(serviceInstaller);
}
}
برای نصب سرویس، از ابزار خط فرمان استفاده کنید:
installutil MyService.exe
حذف سرویس نصب شده
در برخی شرایط، ممکن است نیاز داشته باشید سرویسی را که قبلاً نصب کردهاید حذف یا غیرفعال کنید؛ بهویژه زمانی که نسخه جدیدی از همان سرویس را توسعه دادهاید یا دیگر به آن نیاز ندارید.
حذف درست و کامل سرویس از سیستم، از بروز خطاهای سیستمی و تداخل در اجرای سایر سرویسها جلوگیری میکند.
برای حذف سرویس نصبشده، میتوانید از روشهای زیر استفاده کنید:
installutil /u MyService.exe
یا با استفاده از ابزار sc در Command Prompt:
sc delete MySampleService
همچنین از داخل برنامه هم میتوانید با اجرای دستور بالا از طریق Process.Start سرویس را حذف کنید.
نکات و توصیههای مهم هنگام استفاده از ServiceController
استفاده از ServiceController در سیشارپ، قدرت بالایی برای مدیریت سرویسهای ویندوز فراهم میکند، اما رعایت نکات حرفهای در استفاده از آن، باعث اجرای ایمن و بدون خطای برنامه خواهد شد.
توجه به این توصیهها به توسعهدهندگان کمک میکند تا کنترل سرویسها را به صورت بهینه و پایدار پیادهسازی کنند.
1. برنامهای که از ServiceController استفاده میکند باید با دسترسی Administrator اجرا شود.
2. همیشه قبل از اجرای متد ()Start یا ()Stop، وضعیت سرویس را بررسی کنید.
3. از متد ()WaitForStatus برای اطمینان از تغییر وضعیت سرویس استفاده کنید.
4. در پروژههای بزرگ، عملیات کنترل سرویس را در Thread جداگانه اجرا کنید تا رابط کاربری قفل نشود.
5. در نسخههای جدید داتنت (.NET 5 و بالاتر) باید پکیج System.ServiceProcess.ServiceController را از NuGet نصب کنید.
6. هنگام حذف سرویس، اگر سرویس در حال اجراست، ابتدا آن را متوقف کنید.
مثال پیشرفته: کنترل کامل سرویس خاص
در مثال زیر، وضعیت یک سرویس خاص را بررسی میکنیم و اگر متوقف بود، آن را اجرا میکنیم:
using System;
using System.ServiceProcess;
class Program
{
static void Main()
{
string serviceName = "wuauserv"; // Windows Update
ServiceController sc = new ServiceController(serviceName);
Console.WriteLine($"Service {serviceName} status: {sc.Status}");
if (sc.Status == ServiceControllerStatus.Stopped)
{
Console.WriteLine("Starting service...");
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running);
Console.WriteLine("Service started successfully!");
}
else
{
Console.WriteLine("Service is already running.");
}
}
}
این مثال ساده ولی کاربردی نشان میدهد چگونه میتوان با چند خط کد، سرویسهای حیاتی ویندوز را مدیریت کرد.
پرسشهای کنترل ServiceController در سی شارپ
1. آیا ServiceController در .NET Core هم پشتیبانی میشود؟
بله، اما باید پکیج System.ServiceProcess.ServiceController را به پروژه اضافه کنید.
2. آیا برای کنترل سرویسها نیاز به دسترسی خاصی است؟
بله، برای توقف، شروع یا حذف سرویسها باید برنامه با سطح دسترسی Administrator اجرا شود.
نتیجهگیری
در این مقاله با مفهوم ServiceController در سیشارپ، نحوه ایجاد ServiceController در فرم، و روشهای ایجاد و حذف سرویسها آشنا شدیم.
ServiceController ابزاری قدرتمند برای توسعه نرمافزارهای سیستمی و مدیریتی است که امکان کنترل کامل سرویسهای ویندوز را در اختیار برنامهنویس قرار میدهد.
اگر در حال طراحی ابزارهای مدیریت سیستم، مانیتورینگ یا برنامههای مدیریتی هستید، یادگیری کار با این کنترل یکی از مهارتهای کلیدی شما خواهد بود.
دوره های مرتبط

آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.
999,000 تومان

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