首页 > 编程语言 >使用任务计划开机启动ASP.NET Core应用程序

使用任务计划开机启动ASP.NET Core应用程序

时间:2023-09-19 11:22:17浏览次数:43  
标签:Core ASP Console 应用程序 path NET

ASP.NET Core应用程序现在是一个控制台应用程序,在Windows上直接双击启动,但如果想让开发完成的ASP.NET Core应用程序开机启动,可以将ASP.NET Core应用程序修改成Windows服务运行,但这需要额外添加代码,也可以使用IIS来托管ASP.NET Core应用程序,但可能需要安装一些支持IIS的组件,第三个方式就是用Windows任务计划来设置开机启动。

但是,当一个ASP.NET Core应用程序直接使用Windows任务计划启动的时候,ASP.NET Core应用程序无法正确读取到应用程序的配置文件从而导致程序运行出错,问题的原因在于任务计划执行的当前工作目录不是ASP.NET Core应用程序所在目录,而直接在ASP.NET Core应用程序里面设置当前工作目录是无效的,应用程序启动之前配置文件的目录可能就已经确定了,例如下面的代码:

var app = builder.Build();
app.UseStaticFiles();
//其它代码略...
string basePath1 = AppContext.BaseDirectory;
Environment.CurrentDirectory = basePath1;
Console.WriteLine("Set Current Work Directory:{0}", Directory.GetCurrentDirectory());
app.Run();

上面在ASP.NET Core应用程序里面设置当前工作目录是无效的,代码环境为 ASP.NET Core WebAPI,.NET 6.0

解决这个问题是使用另外一个应用程序修改当前环境工作目录为ASP.NET Core应用程序所在目录即可,假设这个应用程序名字是Start,用任务计划启动Start.exe,而ASP.NET Core应用程序路径作为Start的命令行参数即可,完整代码如下:

namespace Start
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string basePath1 = AppContext.BaseDirectory;
            Environment.CurrentDirectory = basePath1;

            Console.WriteLine("Set Current Work Directory:{0}", Directory.GetCurrentDirectory());
            if (args.Length == 0)
            { 
                Console.WriteLine("no command line args,example:\r\n Start.exe exe_file_path");
                System.Threading.Thread.Sleep(3000);
                return;
            }
            string path= args[0];
            if (System.IO.File.Exists(path))
            {
                string? path2= Path.GetDirectoryName(path);
                if (!string.IsNullOrEmpty(path2))
                {
                    Environment.CurrentDirectory = path2;
                    Console.WriteLine("Set Current Work Directory:{0}", Directory.GetCurrentDirectory());
                }
                Console.WriteLine("start programe : {0}", path);
                System.Diagnostics.Process.Start(path);
            }
            else
            {
                Console.WriteLine("file not exists:{0}", path);
            }
            System.Threading.Thread.Sleep(3000);
        }
    }
}

之后,在任务计划里面如下图进行配置,即可顺利的在系统启动就运行ASP.NET Core应用程序了。

图1:添加一个系统启动执行任务的任务计划

图2:任务计划启动start.exe,然后启动ASP.NET Core应用程序。

 

标签:Core,ASP,Console,应用程序,path,NET
From: https://www.cnblogs.com/bluedoctor/p/17714151.html

相关文章

  • 【原创】接入层交换机无法远程telnet管理
                                                         记一次二层交换机无法远程管理发生前景:同事发现在我们内网环境中有一台交换机RG2628G无法远程处理经过:1)......
  • face_net模型转换为libtorch的心得
    Facenetdemo:https://www.cnblogs.com/muyisun/p/13338098.html如果要转为libtorch可调用,应该使用torch.jit中的script或trace。script会保留一些控制流,trace则会擦除。可以使用.code查看过程。torch_trace_model=torch.jit.script(model,input)#scripttraceprint(torch_......
  • 如何在.NET电子表格应用程序中创建流程图
    前言流程图是一种常用的图形化工具,用于展示过程中事件、决策和操作的顺序和关系。它通过使用不同形状的图标和箭头线条,将任务和步骤按照特定的顺序连接起来,以便清晰地表示一个过程的执行流程。在企业环境中,高管和经理利用流程图来规划业务流程,使他们能够识别瓶颈、优化生产力并......
  • 使用CQRS和Event Sourcing实现高性能.NET应用程序
    摘要本文介绍了如何使用CQRS(命令查询职责分离)和EventSourcing在.NET应用程序中实现高性能和可扩展性。我们将在一个具体的业务场景中应用这些模式,以演示它们如何解决实际问题。引言随着业务的发展和用户需求的增加,我们作为.NET程序员需要考虑如何提高应用程序的性能和可扩展性......
  • 解决Visual Studio 2022中无法编译 .NET Framework 4.5/4.5.1项目(Visual Studio 2022
    最新【一键处理】方法:https://github.com/MrXhh/VSTools/releases1)下载VS2022Net4NotCompileFix2)右键管理员执行3)重启VS https://github.com/MrXhh/VSTools/releases......
  • ViewFaceCore
    https://github.com/ViewFaceCore/ViewFaceCore usingSkiaSharp;usingSystem.Diagnostics;usingSystem.Drawing;usingViewFaceCore.Core;usingViewFaceCore.Models;usingstaticSystem.Net.Mime.MediaTypeNames;namespaceConsoleApp16{internalclass......
  • 记一次nginx.ingress.kubernetes.io/configuration-snippet报错
    记一次nginx.ingress.kubernetes.io/configuration-snippet报错在迁移xxl-job到k8s集群中,报错one or more objects failed to apply, reason: admission webhook "validate.nginx.ingress.kubernetes.io" denied the request: nginx.ingress.kubernetes.io/configu......
  • 深度学习(MobileNetV1)
    整体网络结构如下:最关键的改进是使用了一个叫深度可分离卷积的结构,将原始的3*3卷积升通道的操作分解成了两部分:第一部分是保持通道不变的情况下做3*3卷积。第二部分是使用1*1的卷积做通道提升操作。结果就是能够减少很多的运算量。下面依然是一个猫狗大战的训练程序,并且增加......
  • Jasper模板CLoodop打印记录
    一、填充json文件数据源1.新建json文件,并将字段补充完整,示例如下:{ hosp_name:"医院", rows:[{ name:"姓名", age:12, }]}2.新建json数据源,如下:3.新建Jasper文件4.设置数据源,并导入数据源字段至Fields5.通过拖拽Paramter或Field至模板,进行模板设计二、模......
  • 【NET 7.0、OpenGL ES】使用Silk.NET渲染MMD,并实时进行物理模拟。
    有关mmd播放器,网上也有许多非常漂亮的实现,如 pmxeditor、saba、blender_mmd_tools等等。。首先我想先介绍下我参考实现的仓库:sselecirPyM/Coocoo3D:ExperimentalMMDrendererusingDX12andDXR.(github.com),这是sselecirPyM大神使用NET6.0和DX12实现的mmd渲染器,支持自定......