.net core跨平台之后,部署方式也变得多了。在Windows上可以IIS
、Kestrel
、Windows 服务
,我之前做的一个项目,用的Kestrel
前面再加了一层Nginx
代理。因为之前.net的时候部署老是用IIS
,感觉有点繁琐,所以这次就来探究一下Windows 服务
的方式。
基于WindowsServices创建服务
首先,我们需要安装一个组件Microsoft.Extensions.Hosting.WindowsServices
,然后在Program.cs
使用UseWindowsService()
即可,完整代码如下:
1 | public class Program |
我们发布尝试一下。
1
dotnet publish -r win7-x64 -c release -o ./bin/output
发布完成后,我们有两种方式创建服务:
基于Windows的
SC
基于PowerShell的
New-Service
基于Windows的SC创建Windows服务
首先,我们熟悉一下
sc
的用法:1
sc [ServerName] create Servicename [Optionname= Optionvalues]
[ServerName]可选,可以操作远程计算机。如果在本地计算机上操作就不用添加任何参数。
Servicename 注册的服务名称
Optionname & Optionvalues 注册服务时指定的参数名&参数值
1
2
3
4
5
6type=[own|share|interact|kernel|filesys] #关于建立服务的类型,默认是share。
start=[boot|system|auto|demand|disabled] #关于启动服务的类型,默认是demand(手动)。
error=[normal|severe|critical|ignore] #当服务在导入失败错误的严重性,默认是normal。
binPath=[binary path] #服务二进制文件的路径名。
displayname=[服务显示名称]
password=[用户密码] #如果一个不同于localsys tem的账号使用时需要使用这个。sc 删除:
1
sc [ServerName] delete [ServiceName]
sc start/stop
1
sc start/stop [ServiceName]
SC创建服务
我们现在就把我们刚才发布的二进制文件注册成Windows服务
1
2C:\Users\lenovo\source\repos\Swagger.Demo\Web\bin\output>sc create SwaggerDemo start=auto binpath="\"C:\Users\lenovo\source\repos\Swagger.Demo\Web\bin\output\Web.exe\"
[SC] CreateService 成功现在我们就启动起来看看效果:
1
2
3
4
5
6
7
8
9
10
11
12C:\Users\lenovo\source\repos\Swagger.Demo\Web\bin\output>sc start SwaggerDemo
SERVICE_NAME: SwaggerDemo
TYPE : 10 WIN32_OWN_PROCESS
STATE : 2 START_PENDING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x7d0
PID : 14428
FLAGS :基于PowerShell New-Service创建服务
语法格式:
1
2
3
4
5
6
7
8
9
10
11
12New-Service
[-Name] <String>
[-BinaryPathName] <String>
[-DisplayName <String>]
[-Description <String>]
[-SecurityDescriptorSddl <String>]
[-StartupType <ServiceStartupType>]
[-Credential <PSCredential>]
[-DependsOn <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]我们使用
New-Service
重新注册服务。1
2
3
4
5PS C:\Users\lenovo> New-Service -Name SwaggerDemoByPowerShell -BinaryPathName C:\Users\lenovo\source\repos\Swagger.Demo\Web\bin\output\Web.exe -Description "SwaggerDemoByPowerShell" -DisplayName "SwaggerDemoByPowerShell" -StartupType Automatic
Status Name DisplayName
------ ---- -----------
Stopped SwaggerDemoByPo... SwaggerDemoByPowerShell
[参考]
https://www.cnblogs.com/inuex/p/4299690.html
https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-3.1&tabs=visual-studio