如何使用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工具。

下载地址:https://nssm.cc/download

下载后无需安装。

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】批处理文件

 选择是,确定移除服务。

 服务御载完成。

posted @ 2024-11-05 17:04  民工黑猫  阅读(34)  评论(0编辑  收藏  举报