نحوه ایجاد یک سرویس ویندوز

گاهی اوقات شما نیاز به یک برنامه یا اسکریپت برای ادامه کار دارید، خواه وارد رایانه خود شده باشید یا نه. شاید این یک اسکریپت PowerShell برای نظارت بر پورت ها(PowerShell script to monitor ports) یا یک سرور وب باشد که صفحه ای را در شبکه خانگی شما میزبانی می کند(web server hosting a page on your home network) .

نکته این است که اگر می خواهید یک فرآیند، اسکریپت یا برنامه تا زمانی که رایانه روشن است اجرا شود، باید یک سرویس Windows(Windows Service) ایجاد کنید .

برای ایجاد سرویس ویندوز به چه چیزی نیاز دارم؟(What Do I Need to Create a Windows Service?)

برای ایجاد یک سرویس ویندوز(Windows) در ویندوز 10(Windows 10) ، چند پیش نیاز وجود دارد: 

  • دسترسی مدیر(Administrator) در رایانه
  • چیزی برای اجرا به عنوان یک سرویس ( پاورشل اسکریپت(PowerShell Script) ، برنامه و غیره)
  • Non-Sucking Service Manager ( NSSM ) نصب شده است

مدیر خدمات غیر مکنده چیست؟(What Is the Non-Sucking Service Manager?)

بله، شما نمی توانید چنین نامی را بدون توضیح آن حذف کنید. مطمئناً نام تاسف بار است، اما دقیق است. Non-Sucking Service Manager ( NSSM ) مسلماً ساده ترین راه برای ایجاد یک سرویس ویندوز(Windows) است که هم بسیار قابل اعتماد و هم قابل تنظیم است. به علاوه، این نرم افزار رایگان و منبع باز(Open Source Software) (OSS) است.

NSSM را می توان از طریق Command Prompt ویندوز(Windows Command Prompt) یا یک رابط کاربری گرافیکی ( GUI ) استفاده کرد. این بدان معنی است که هر کسی می تواند از آن استفاده کند. NSSM را می توان در هر نسخه ای از ویندوز(Windows) که به ویندوز 2000(Windows 2000) برمی گردد، استفاده کرد. نسخه های 32 بیتی و 64 بیتی(32-bit and 64-bit) وجود دارد. اگر از رایانه 64 بیتی استفاده می کنید، ابتدا آن نسخه را امتحان کنید. اگر کار نکرد، به نسخه 32 بیتی برگردید. 

می توانید NSSM را از وب سایت دانلود کنید(download NSSM from the website) ، NSSM را از Git شبیه(clone NSSM from Git) سازی کنید ، یا NSSM را با Chocolatey نصب کنید(install NSSM with Chocolatey) . Chocolatey یک مدیریت بسته برای ویندوز(Chocolatey is a package manager for Windows) است. بسته به مسیری که طی می کنید، روش های نصب(Installation) متفاوت خواهد بود. لطفاً به دستورالعمل های (Please)NSSM مراجعه کنید . برای مثال، ما در حال دانلود از وب سایت NSSM و نصب آن در C:\WINDOWS\system32 .

یک سرویس ویندوز با NSSM ایجاد کنید(Create a Windows Service With NSSM)

برای این مثال، ما یک سرویس از یک اسکریپت PowerShell ایجاد می کنیم تا (PowerShell script)میانگین درصد بار CPU(CPU average load percentage) را ثبت کند . 

  1. این اسکریپت را به‌عنوان log-CPULoadPercentage.ps1 در مکانی کپی کنید و ذخیره کنید که احتمال دسترسی به آن توسط دیگران وجود ندارد. دایرکتوری C:/Scripts را ایجاد کرده و در آنجا ذخیره کنید. همچنین، یک پوشه در Scripts به نام Logs ایجاد کنید . توجه داشته باشید که مسیر اسکریپت C:/Scripts/log-CPULoadPercentage.ps1 است. بعداً به آن نیاز خواهید داشت.

توجه(Note) : تمام خطوط زیر که با نماد # همراه شده اند، نظر هستند و روی اسکریپت تاثیری ندارند.

CLS #Optional. I like to use this to clear the terminal when testing.

#Make sure you have a folder called Logs in the same directory as this script
#The log is where the records will be stored.
Start-Transcript -Path "$PSScriptRoot\Logs\log-CPULoadPercentage-$(get-date -f yyyy-MM-dd).txt" -Append

#While loop keeps it running until manually stopped
While ($True){
     #Creates a timestamp to know when the measurement was taken
     $timeStamp = get-date -f yyyy-MM-h:mm:ss

     #Gets the average load percentage at that time, then waits 5 seconds to do it again.
     $cpuLoadPercent = Get-CimInstance win32_processor | Measure-Object -Property LoadPercentage -Average | Select-Object Average;Start-Sleep -Seconds 5

     #Isolates just the average so there isn't a weird @{Average=13} string
     $cpuLoadPercent = $cpuLoadPercent.Average

     #writes results to screen, or in this case to the log
     Write-Host "$timeStamp CPU Load Percentage $cpuLoadPercent"
}

Stop-Transcript
  1. این را می توان در خط فرمان ویندوز(Windows Command Prompt) یا PowerShell انجام داد. (PowerShell. )آن را به عنوان Administrator باز کنید(Open it as Administrator) .
  2. دستور nssm install logCPUAvg را(nssm install logCPUAvg) وارد کرده و اجرا کنید. پنجره نصب کننده سرویس NSSM باز می شود .(NSSM service installer)

  1. روی(Click) دکمه بیضی کنار قسمت Path: کلیک کنید ، به powershell.exe بروید که معمولاً در C:\Windows\System32\ قرار دارد. powershell.exe را انتخاب کنید. فیلدهای Path: و Startup Directory: به طور خودکار پر می شوند.(Startup directory:)

  1. موارد زیر را در فیلد Arguments وارد کنید: (Arguments:)-ExecutionPolicy Bypass -NoProfile -File “C:\PathToScript\get-Script.ps1” ، جایی که آخرین قسمت مسیر اسکریپت PowerShell شما و نام اسکریپت است.  

  1. تب Details را انتخاب کنید. آنچه را که می‌خواهید این سرویس مانند مدیریت خدمات (Services)ویندوز(Windows) نشان داده شود را در قسمت نمایش نام:(Display name: ) وارد کنید. سپس، آنچه را که انجام می دهد در قسمت Description: وارد کنید . نوع راه اندازی:(Startup type: ) می تواند به صورت خودکار(Automatic) ، خودکار (شروع تاخیری)(Automatic (Delayed Start)) ، دستی(Manual) یا غیرفعال(Disabled) تنظیم شود. برای این تمرین، Automatic خوب است.

  1. برگه Log on را(Log on ) انتخاب کنید. دکمه رادیویی This account(This account) : را انتخاب کنید و حساب کاربری و رمز عبوری که سرویس به عنوان اجرا می شود را وارد کنید. باید حسابی را انتخاب کنید که سرویس تحت آن اجرا شود. در حالت ایده‌آل، یک حساب کاربری ویندوزی(Windows) خواهید داشت که فقط برای اجرای این سرویس ایجاد شده است. مجوزهای این حساب باید فقط به کارهایی که سرویس باید انجام دهد محدود شود. می‌توانید حساب سیستم محلی(Local System account) را انتخاب کنید ، اما به دلایل امنیتی توصیه نمی‌شود.

چندین تب دیگر وجود دارد که می توان از آنها برای سفارشی کردن سرویس استفاده کرد. برای این تمرین، مقادیر پیش فرض در آن تب ها کافی است. دکمه Install Service را(Install service ) انتخاب کنید.

  1. هنگامی که سرویس نصب شد، خواهید دید که Service “logCPUAvg” installed successfully! پنجره برای بستن آن، OK را انتخاب کنید . که نصب به پایان می رسد.

  1. Windows Services Manager را باز کنید و مطمئن شوید که سرویس وجود دارد.

  1. برای اطمینان از اجرا(Run) شدن سرویس، سرویس را اجرا کنید.

  1. برای تأیید اینکه این سرویس در حال اجرا است، از File Explorer برای رفتن به جایی که گزارش قرار است ذخیره شود استفاده کنید تا ببینید آیا وجود دارد یا خیر.

nssm-check-log.png

حذف یک سرویس ویندوز با NSSM(Removing a Windows Service With NSSM)

شاید دیگر نیازی به نظارت بر بار CPU خود(monitor your CPU) نداشته باشید، بنابراین می خواهید از شر سرویس خلاص شوید. خوشبختانه، NSSM این کار را آسان می کند. 

  1. در Windows Services Manager ، سرویس را متوقف کنید. این کار را با انتخاب سرویس Log CPU Average Load و سپس انتخاب دکمه توقف مربع در نوار ابزار یا پیوند Stop the service در سمت چپ انجام دهید.

  1. Command Prompt ویندوز(Windows Command Prompt ) یا PowerShell را(PowerShell) به عنوان Administrator باز کنید.
  2. دستور nssm remove logCPUAvg را(nssm remove logCPUAvg) وارد کرده و دستور را اجرا کنید. 

  1. NSSM از شما می خواهد که تأیید کنید. بله(Yes) را انتخاب کنید .

  1. هنگامی که سرویس حذف شد، خواهید دید که Service “logCPUAvg” removed successfully! تائیدیه. OK را انتخاب کنید و کارتان تمام شد.

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

سرویس‌ها روشی عالی برای اجرای برنامه‌ها یا اسکریپت‌هایی هستند که باید همیشه اجرا شوند، در صورت عدم موفقیت، خودشان را مجدداً راه‌اندازی می‌کنند یا به امتیازاتی متفاوت از کاربر فعلی نیاز دارند. اگر برای انجام همه این کارها به برنامه یا اسکریپت خود نیاز ندارید، به جای آن از یک کار برنامه ریزی شده(using a Scheduled Task) استفاده کنید.



About the author

من یک کارشناس باتجربه ویندوز 10 و 11/10 هستم که هم در مرورگرها و هم در برنامه های گوشی های هوشمند تجربه دارم. من بیش از 15 سال مهندس نرم افزار هستم و با تعدادی از شرکت های بزرگ از جمله مایکروسافت، گوگل، اپل، یوبی سافت و غیره کار کرده ام. من همچنین توسعه ویندوز 10/11 را در سطح کالج تدریس کرده ام.



Related posts