如何使用nssm将asp.net Framework/asp.net core/.net6/.net8的webapi项目、mvc项目、控制台项目、WPF项目、winform项目、Webform项目等注册为windows服务
以前做windows服务,都是开发一个控制台程序,然后使用windows下的【sc】命令将控制台程序注册为windows服务,因为控制台程序自带托管主机,所以可以方便的注册为windwos服务。
以前做控制台程序一般用于Job定时器、MQ出列消费者端,但是想在控制台程序里集成一个webapi应用并一起安装成windows,用windows里的webapi来跟windows交互,这个怎么办呢,这个可不好办了,因为在控制台程序里创建webapi有两种方案。
第一种方案是给IHostBuilder的主机构建器配置一个ConfigureWebHostDefaults的并指定一个Startup启动类,
第二个方案是在IHostBuilder的ConfigureServices方法里使用AddHostedService<IHostedService>()方法添加一个HostedService,然后在HostedService的实现里使用 WebApplication.CreateSlimBuilde()创建一个轻量级的webapi的主机构建器,它简化了配置过程,减少了不必要的配置项,阉割了很多webapi的功能,
这两个方案都不佳,第二个方案更不可取。
使用这两种方案的基础代码:
第二个方案的WebApp继承后台服务
这两个方案使用起来都没有原生态的webapi方便。那么还有没有第三种方案呢,既可以有webapi的功能,又可以注册为windows服务,当然有,第三种方案就是使用nssm工具将webapi项目注册为windows服务。
使用nssm工具可以直接将asp.net Framework、asp.net core、.net6、.net8、.net10及后续本的的webapi项目、mvc项目、控制台项目、winform项目、WPF项目、webform等注册为windows服务,不需要给代码做任何的改动。
不仅限于上面这些,nssm可以将所有windows可执行文件注册为windows服务。
下面,使用nssm将asp.net8的webapi项目注册为windows服务为例,介绍nssm的基本用法:
【第一步】开发一个webapi、或mvc、或控制台项目。
将webapi或mvc、或控制台项目发布到本的文件夹。
【第二步】,下载nssm工具。
下载后无需安装。
nssm常用命令
# 显示服务安装 GUI: nssm install [<servicename>] # 无需确认安装服务: nssm install <servicename> <app> [<args> ...] # 显示服务编辑 GUI: nssm edit <servicename> # 直接检索或编辑服务参数: nssm dump <servicename> # 导出服务的所有参数 nssm get <servicename> <parameter> [<subparameter>] # 获取特定服务参数的值 nssm set <servicename> <parameter> [<subparameter>] <value> # 设置特定服务参数的值 nssm reset <servicename> <parameter> [<subparameter>] # 重置特定服务参数的值 # 显示服务移除 GUI: nssm remove [<servicename>] # 无需确认移除服务: nssm remove <servicename> confirm # 管理服务: nssm start <servicename> # 启动服务 nssm stop <servicename> # 停止服务 nssm restart <servicename> # 重启服务 nssm status <servicename> # 显示服务状态 nssm statuscode <servicename> # 显示服务状态码 nssm rotate <servicename> # 旋转服务日志 nssm processes <servicename> # 显示服务关联的进程
【第三步】,编写执行nssm命令的批处理文件
(1)编写安装批处理文件(install.bat),可以随意给批处理文件命名,
chcp 65001 @echo.服务开始启动...... @echo off:: :: nssm install DFStore.CJStoreMgrApi "F:\wwwroot\nssm\DFStore.CJStoreMgrApi\DFStore.CJStoreMgrApi.WebApi.exe" --urls=http://localhost:8051 start=auto nssm install DFStore.CJStoreMgrApi "F:\wwwroot\nssm\DFStore.CJStoreMgrApi\DFStore.CJStoreMgrApi.WebApi.exe" --urls=http://*:8051 start=auto :: sc config DFStore.CJStoreMgrApi start= auto nssm start DFStore.CJStoreMgrApi @echo off @echo.服务启动完毕! @pause
参数 --urls是指定webapi站点启动的端口
(2)编写移除服务的批处理文件(remove. bat)
chcp 65001 @echo off @echo.开始删除服务...... nssm stop DFStore.CJStoreMgrApi nssm remove DFStore.CJStoreMgrApi @echo off @echo.服务删除完毕! @pause
批处理文件所在目录,可以随意指定。
【第四步】 将asp.net webapi项目发布后的.exe文件安装windows服务
(1) 将下载的nssm文件copy到 install.bat 与 remove.bat的同级目录,
copy到批处理命令的同级目录是为了方便管理,也可以不copy到同级目录,这时在编写的install.bat与remove.bat文件里需要指定nssm的绝对路径。
(2)将webapi项目注册为windows服务
用超级管理员权限打开cmd窗口,执行【intall.bat】批处理文件就可以将webapi项目注册为windows服务了。
在cmd窗口中定位到install.bat的所在目录,执行 【nstall.bat】批处理文件安装服务
服务安装成功,执行 services.msc命令打开服务管理窗口,查看服务启动情况
服务安装完成。
【第5步】御载服务
执行前面编写的 【remove.bat】批处理文件
选择是,确定移除服务。
服务御载完成。