首页 > 系统相关 >net core 在windows 下部署服务

net core 在windows 下部署服务

时间:2023-10-23 14:34:40浏览次数:36  
标签:core windows builder Services var using net Configuration app

参考来源 https://www.jb51.net/article/265865.htm

首先要 指定配置文件,否则运行的时候找不到appsettings.json ,

在使用 sc create 创建 Windows 服务时,确实存在一个问题,即服务的默认工作目录是 C:\Windows\System32,而不是服务的可执行文件所在的目录。这就是为什么你的服务找不到 appsettings.json 文件的原因。

然后要安装 依赖 Microsoft.Extensions.Hosting.WindowsServices包

示例代码如下

using System.Diagnostics;
using System.Reflection;
using System.Text.Json.Serialization;
using ApiHelper.ext;
using ApiHelper.middleware;
using Microsoft.EntityFrameworkCore;
using pointserver.api;
using pointserver.dbcontext;
using pointserver.impl;
using pointserver.lifecycle;
using TDEngineHelper;

var assemblyName = Assembly.GetExecutingAssembly().GetName().Name;
var scCMD = $"sc create {assemblyName} binpath= \"{Process.GetCurrentProcess().MainModule!.FileName}\" start= auto";
Console.WriteLine($"创建服务语句为 {scCMD}");


var builder = WebApplication.CreateBuilder(args);

IConfiguration configuration = null; //so it can be used on other configuration functions bellow


var baseDirectory = AppContext.BaseDirectory;
//load config file, build it, give it to WebApplication and keep the config variable for further use.
// 必须指定配置文件,否则做成服务 读取不到配置文件
builder.WebHost.ConfigureAppConfiguration(
    (hostingContext, config) =>
    {
        var path = Path.Combine(baseDirectory,builder.Environment.IsDevelopment()?"appsettings.Development.json"
            : "appsettings.json");
        config.AddJsonFile(path, optional: false, reloadOnChange: true);
        config.AddEnvironmentVariables();
        configuration = config.Build();
    });
Console.WriteLine($"当前工作目录为 {baseDirectory}, 将其设置为配置文件目录");
builder.Configuration.SetBasePath(baseDirectory); // 设置配置文件路径 不加这行,sc 创建服务 默认工作目录是 C:\Windows\System32 会找不到配置文件
builder.UseLog();

var mysqlConnectionString = builder.Configuration["ConnectionStrings:MySQL"];
Console.WriteLine($"mysql 连接字符串为 {mysqlConnectionString}");
var tdEngineHost = builder.Configuration.GetConnectionString("TDEngineHost");
var tdEnginePort = builder.Configuration.GetConnectionString("TDEnginePort");
var tdEngineUser = builder.Configuration.GetConnectionString("TDEngineUser");
var tdEnginePass = builder.Configuration.GetConnectionString("TDEnginePassword");
var tdEngineDb = builder.Configuration.GetConnectionString("TDEngineDatabase");
// port to short 
short.TryParse(tdEnginePort, out var tdEnginePortShort);



// Add services to the container.


builder.Services.AddControllers()
    .AddJsonOptions(x => x.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles); // 防止Json 循环引用
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddScoped<IPointRepo, PointRepo>();
builder.Services.AddScoped<IPointGroupRepo, PointGroupRepo>();
builder.Services.AddScoped<IPointGroupRltPointRepo, PointGroupRltPointRepo>();
builder.Services.AddScoped<IUnitRepo, UnitRepo>();
builder.Services.AddScoped<ISystemRepo, SystemRepo>();
builder.Services.AddSingleton<IHostedService, HostService>(); // 程序启停服务 
// tdEngine service 依赖注入
builder.Services.AddSingleton<ITDEngineRepo>(new TDEngineRepo(tdEngineHost, tdEngineUser, tdEnginePass, tdEngineDb,
    tdEnginePortShort));


builder.Services.AddDbContext<PointServerDbContext>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

builder.Services.AddWindowsService(o => { o.ServiceName = assemblyName; }); // 必须加上这个,不然报错  windows 无法启动pointsrever 服务 错误 1053 : 服务没有及时响应启动或控制请求 
var app = builder.Build();

app.UseCustomExceptionHandler(); // 异常中间件

app.UseSwagger();
app.UseSwaggerUI();
// 允许所有跨域
app.UseCors(x => x
    .AllowAnyMethod()
    .AllowAnyHeader()
    .SetIsOriginAllowed(origin => true) // allow any origin
    .AllowCredentials());

app.UseStaticFiles();

app.MapControllers();


app.Run();



标签:core,windows,builder,Services,var,using,net,Configuration,app
From: https://www.cnblogs.com/ifnk/p/17782324.html

相关文章

  • windows安全事件查看及安全事件id汇总
    Win+R打开运行,输入“eventvwr.msc”,回车运行,打开“事件查看器”;或者右键我的电脑-管理-系统工具-事件查看器。在事件查看器中右键单击系统或安全日志,选择筛选当前日志,在筛选器中输入下列事件ID即可。日志路径:C:\Windows\System32\winevt\Logs查看日志:Security.evtx、System.evtx......
  • kubernetes批量删除evicted状态pod
    #!/bin/bash#getnamespacenamespaces=`kubectlgetpod-A|grep-i"evicted"|awk'{print$1}'`fornamespacein${namespaces}dokubectlgetpod-n${namespace}|grep-i"evicted"|awk'{print$1}'|xargsk......
  • Cygwin/WSL调用Windows schtasks命令操作Windows计划任务系列函数(查询、启用、禁用、
    新增、删除、查询任务计划#wintask-query#根据任务名称关键词查询Windows计划任务#wintask-del#根据任务名称关键词删除Windows计划任务,也可以传递计划任务完整路径#wintask-run#根据任务名称关键词立即运行Windows计划任务#wintask-enable#根据任务名称......
  • Windows11 实时字幕如何实现实时翻译?
    Windows11实时字幕如何实现实时翻译?引言 2023年6月27日Windows11更新新增实用功能!此更新添加了以下语言的实时字幕:中文(简体和繁体)法语(法国、加拿大)German意大利语日语葡萄牙语(巴西、葡萄牙)Spanish丹麦语英语(爱尔兰,其他英语方言)韩......
  • Netsuite Oauth1.0 C# 项目对接 踩坑记录
    参考Github项目地址:https://github.com/ancpetras/asp.net-netsuite-oauth-1.0-starter注意点:1、Realm这个参数在Authorization请求头中,但是它不需要参与签名,不要将Realm丢进去一起签名了。2、参与签名的还包括URL传参中的参数,比如:?script=152&deploy=1中的script与deploy。3、......
  • NetCore windowsService 看门狗应用程序
    publicclassDogService:BackgroundService{publicoverrideTaskStartAsync(CancellationTokencancellationToken){returnbase.StartAsync(cancellationToken);}///<summary>///每一秒执行一次......
  • 如何实现Windows11原生的语音输入?AI语音转文字,比打字快多了
    引言 在Win11之前,要实现语音识别,相对比较麻烦,或者使用第三方输入法软件,但当有新闻报导出用户的输入信息被非法收集和利用,广告和骚扰接踵而至,后由于隐私保护级别的提升,之后无论是输入法厂家还是用户,都变得比之前要谨慎多了。现在换上Win11的用户越来越多,但有些用户还是由于惯性......
  • 使用 MQTTnet 实现 MQTT 通信示例
    转自:https://cloud.tencent.com/developer/article/2103199一、什么是MQTT?MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。MQTT是基于二进制消息的发布/订阅编程模式的消息协议,如今已经成为OASIS......
  • [转]linux ss 命令 (全称Socket Statistics套接字统计,是iproute2套件中的一个,可替代
    原文地址:linuxss命令-sparkdev-博客园ss是SocketStatistics的缩写。ss命令可以用来获取socket统计信息,它显示的内容和netstat类似。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快。当服务器的socket连接数量变得非常大......
  • 掌握 Kubernetes 故障排除:有效维护集群的最佳实践和工具
    Kubernetes是一款管理容器化应用程序的强大工具。然而,与任何复杂的系统一样,使用它时也可能出错。当问题出现时,掌握有效的故障排除技术和工具非常重要。 本文将介绍以下步骤,助您了解事件收集的入门知识:检索最新事件使用Pod模拟问题在位于PV的Pod中存储事件 检索......