前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用任务计划开机启动ASP.NET Core应用程序

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

作者头像
用户1177503
发布2023-10-14 19:08:44
2870
发布2023-10-14 19:08:44
举报
文章被收录于专栏:程序员的SOD蜜

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应用程序里面设置当前工作目录是无效的,应用程序启动之前配置文件的目录可能就已经确定了,例如下面的代码:

代码语言:javascript
复制
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的命令行参数即可,完整代码如下:

代码语言:javascript
复制
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应用程序。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档