.NET WebApi 托管在WindowsServices 上
最近在WPF项目中使用了WebApi项目,项目在部署的时候需要托管在Windows Services 服务上,我使用的是.NET6
1.正常在VS中新建一个.NET WebApi 项目,默认就可以,我去掉了https,使用http就可以
2.引入nuget 包 Microsoft.Extensions.Hosting.WindowsServices
3.在Porgram.cs 中加入代码
//Porgam.cs 的第一行
Directory.SetCurrentDirectory(AppContext.BaseDirectory);
//在host 中进行托管
builder.Host.UseWindowsService();
3.用 管理员身份 打开 PowerShell 工具,进入所在的webapi项目目录 执行(一定要用管理员身份打开,我使用VS中的PowerShell 提示“拒绝访问”)
//项目发布 设置输出目录
dotnet publish --output "D:\Publish"
//创建服务,create “服务名称” binpath 为项目发布设置的输出目录,(可以先打开exe 看看运行是否成功)
sc.exe create "WPFWEB" binpath= "D:\Publish\TestWebAPI.exe"
//开启服务
sc.exe start "WPFWEB"```
4.在浏览器输入项目接口地址查看一下是否成功,开启服务不报错,基本就没有问题了。
异常处理:如果开启服务报错可以去查看window 日志
错误应用程序名称: WebApiHostWindows.exe,版本: 1.0.0.0,时间戳: 0x66470000
错误模块名称: KERNELBASE.dll,版本: 10.0.22621.3880,时间戳: 0xdb9989e8
异常代码: 0xe0434352
错误偏移量: 0x000000000005fabc
错误进程 ID: 0x0x23A0
错误应用程序启动时间: 0x0x1DADC48B8805018
错误应用程序路径: D:\Publish\directory\WebApiHostWindows.exe
错误模块路径: C:\WINDOWS\System32\KERNELBASE.dll
报告 ID: 47615482-ab27-4f50-b9b1-31bee19c9e7e
错误程序包全名:
错误程序包相对应用程序 ID:
这是当时遇到的一个错误
解决方法就是在program.cs 第一行没有指定工作目录 参考链接!
https://blog.csdn.net/sD7O95O/article/details/127274325