使用任務(wù)計劃開機啟動ASP.NET Core應(yīng)用程序
ASP.NET Core應(yīng)用程序現(xiàn)在是一個控制臺應(yīng)用程序,在Windows上直接雙擊啟動,但如果想讓開發(fā)完成的ASP.NET Core應(yīng)用程序開機啟動,可以將ASP.NET Core應(yīng)用程序修改成Windows服務(wù)運行,但這需要額外添加代碼,也可以使用IIS來托管ASP.NET Core應(yīng)用程序,但可能需要安裝一些支持IIS的組件,第三個方式就是用Windows任務(wù)計劃來設(shè)置開機啟動。
但是,當一個ASP.NET Core應(yīng)用程序直接使用Windows任務(wù)計劃啟動的時候,ASP.NET Core應(yīng)用程序無法正確讀取到應(yīng)用程序的配置文件從而導(dǎo)致程序運行出錯,問題的原因在于任務(wù)計劃執(zhí)行的當前工作目錄不是ASP.NET Core應(yīng)用程序所在目錄,而直接在ASP.NET Core應(yīng)用程序里面設(shè)置當前工作目錄是無效的,應(yīng)用程序啟動之前配置文件的目錄可能就已經(jīng)確定了,例如下面的代碼:
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應(yīng)用程序里面設(shè)置當前工作目錄是無效的,代碼環(huán)境為 ASP.NET Core WebAPI,.NET 6.0
解決這個問題是使用另外一個應(yīng)用程序修改當前環(huán)境工作目錄為ASP.NET Core應(yīng)用程序所在目錄即可,假設(shè)這個應(yīng)用程序名字是Start,用任務(wù)計劃啟動Start.exe,而ASP.NET Core應(yīng)用程序路徑作為Start的命令行參數(shù)即可,完整代碼如下:
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); } } }
之后,在任務(wù)計劃里面如下圖進行配置,即可順利的在系統(tǒng)啟動就運行ASP.NET Core應(yīng)用程序了。

圖1:添加一個系統(tǒng)啟動執(zhí)行任務(wù)的任務(wù)計劃

圖2:任務(wù)計劃啟動start.exe,然后啟動ASP.NET Core應(yīng)用程序。
浙公網(wǎng)安備 33010602011771號