如何创建 Windows 服务

有时,无论您是否登录到计算机,您都需要一个应用程序或脚本来继续运行。也许它是一个PowerShell 脚本来监视端口(PowerShell script to monitor ports)在您的家庭网络上托管一个页面的 Web 服务器(web server hosting a page on your home network)

关键是,如果您希望进程、脚本或程序在计算机开启时运行,您需要创建一个Windows 服务(Windows Service)

创建 Windows 服务需要什么?(What Do I Need to Create a Windows Service?)

要在Windows 10(Windows 10)中创建Windows服务,有几个先决条件: 

  • 计算机上的管理员(Administrator)访问权限
  • 作为服务运行的东西(PowerShell脚本(PowerShell Script)、程序等)
  • 已安装非吸吮服务管理器(Service Manager)( NSSM )

什么是非吸吮服务经理?(What Is the Non-Sucking Service Manager?)

是的,你不能不解释就放弃这样的名字。当然这个名字是不幸的,但它是准确的。Non-Sucking Service Manager ( NSSM ) 可以说是创建高度可靠和可配置的Windows服务的最简单方法。(Windows)此外,它是免费的开源软件(Open Source Software)(OSS)。

NSSM 可以通过Windows 命令提示符(Windows Command Prompt)或图形用户界面 ( GUI ) 使用。这意味着任何人都可以使用它。NSSM 可用于任何版本的Windows,包括Windows 2000。有32 位和 64 位(32-bit and 64-bit)版本。如果您使用的是 64 位计算机,请先尝试该版本。如果它不起作用,请回退到 32 位版本。 

您可以从网站下载 NSSM(download NSSM from the website)从 Git 克隆 NSSM(clone NSSM from Git),或使用 Chocolatey 安装 NSSM(install NSSM with Chocolatey)Chocolatey 是 Windows 的包管理器(Chocolatey is a package manager for Windows)安装(Installation)方法将根据您采用的路线而有所不同。(Please)查阅NSSM的说明。对于我们的示例,我们从NSSM网站下载并将其安装在C:\WINDOWS\system32中。

使用 NSSM 创建 Windows 服务(Create a Windows Service With NSSM)

对于此示例,我们将使用PowerShell 脚本(PowerShell script)创建一个服务来记录CPU 平均负载百分比(CPU average load percentage)。 

  1. 将此脚本作为log-CPULoadPercentage.ps1复制并保存到其他人不太可能访问的位置。尝试创建目录C:/Scripts 并将其存储在那里。此外,在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 命令提示符(Windows Command Prompt)PowerShell 中完成。(PowerShell. )以管理员身份打开它(Open it as Administrator)
  2. 输入命令nssm install logCPUAvg并运行它。NSSM 服务安装程序(NSSM service installer)窗口将打开。

  1. 单击(Click)Path:字段旁边的省略号按钮,导航到通常位于C:\Windows\System32\powershell.exe。选择 powershell.exe。路径:(Path:)启动目录:(Startup directory:)字段将自动填充。

  1. 在Arguments:(Arguments:)字段中输入以下内容: -ExecutionPolicy Bypass -NoProfile -File “C:\PathToScript\get-Script.ps1”,其中最后一部分是PowerShell脚本的路径和脚本名称。  

  1. 选择详细信息(Details)选项卡。在“显示名称:(Display name: ) ”字段中输入您希望服务在Windows 服务(Services)管理器中显示的内容。然后,在描述:(Description:)字段中输入它的作用。启动类型:(Startup type: )可设置为AutomaticAutomatic (Delayed Start)ManualDisabled。对于这个练习,自动(Automatic)是好的。

  1. 选择登录(Log on )选项卡。选择此帐户(This account):单选按钮并输入服务将运行的帐户和密码。您需要选择一个运行该服务的帐户。理想情况下,您将创建一个专门用于运行此服务的Windows帐户。此帐户的权限应仅限于服务需要执行的操作。您可以选择本地系统帐户(Local System account),但出于安全原因不建议这样做。

还有其他几个选项卡可用于自定义服务。对于本练习,这些选项卡中的默认值就足够了。选择安装服务(Install service )按钮。

  1. 安装服务后,您会看到Service “logCPUAvg” installed successfully! 窗户。选择确定(OK)将其关闭。至此安装结束。

  1. 打开Windows 服务管理器(Windows Services Manager )并确保该服务在那里。

  1. 运行(Run)服务以确保它能够运行。

  1. 要验证此服务是否正在运行,请使用文件资源管理器(File Explorer )导航到应该保存日志的位置以查看它是否存在。

nssm-check-log.png

使用 NSSM 删除 Windows 服务(Removing a Windows Service With NSSM)

也许您不再需要监控您的 CPU(monitor your CPU)负载,因此您想摆脱该服务。幸运的是,NSSM让这一切变得简单。 

  1. Windows 服务管理器(Windows Services Manager)中,停止服务。为此,请选择Log CPU Average Load服务,然后选择工具栏中的方形停止按钮或左侧的停止服务链接。(Stop the service)

  1. 以管理员身份打开Windows 命令提示符(Windows Command Prompt )PowerShell 。
  2. 输入命令nssm remove logCPUAvg并执行命令。 

  1. NSSM会要求您确认。选择(Yes)

  1. 删除服务后,您会看到Service “logCPUAvg” removed successfully! 确认。选择确定(OK),您就完成了。

就这样。检查服务管理器以确保服务不再存在是个好主意。如果您仍然看到该服务,则可能需要刷新屏幕,它应该会消失。

服务是运行应用程序或脚本的好方法,这些应用程序或脚本需要一直运行,如果失败则重新启动,或者需要与当前用户不同的权限。如果您不需要您的应用程序或脚本来执行所有这些操作,请考虑改用计划任务(using a Scheduled Task)



About the author

我是一位强烈推荐的 Windows 10 专家,我专注于帮助人们个性化他们的计算机外观并使他们的 Office 工具更加用户友好。我利用自己的技能帮助他人找到使用 Microsoft Office 的最有效方法,包括如何格式化文本和图形以进行在线打印、如何为 Outlook 创建自定义主题,甚至如何自定义桌面任务栏的外观计算机。



Related posts