使用 sc.exe 从 Blazor 应用程序创建服务的问题

问题描述

我创建了一个 Blazor 服务器端 Web 应用程序,并希望将其作为 Windows 服务托管。我关注了 ASP.NET Core 和这篇 film 中的文章

从 cmd 运行 sc create MyAppSrv bin= "C:\Repo\myap\WebAppTest\bin\Debug\net5.0\win10-x64\WebAppTest.exe --service"(以管理员身份运行)以显示 sc MAN 结束。

我在 csproj 文件<RuntimeIdentifier>win10-x64</RuntimeIdentifier>添加<PropertyGroup>,我的 Program 类看起来像:

public class Program 
    {
        public static void Main(string[] args)
        {
            ManageService(args);

            //CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

        private static void ManageService(string[] args)
        {
            bool IsService = false;

            if (!Debugger.IsAttached && args.Contains("--service"))
                IsService = true;

            if (IsService)
            {
                string pathToContentRoot = Directory.GetCurrentDirectory();

                //var webHostArgs = args.Where(arg => arg != "--console").ToArray();

                string configurationFile = "";
                string portNo = "5001"; //default

                var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
                pathToContentRoot = Path.GetDirectoryName(pathToExe);

                string appJsonFilePath = Path.Combine(pathToContentRoot,configurationFile);

                if (File.Exists(appJsonFilePath))
                {
                    using (StreamReader sr = new StreamReader(appJsonFilePath))
                    {
                        string jsonData = sr.ReadToEnd();
                        JObject jObject = JObject.Parse(jsonData);
                        if (jObject["ServicePort"] != null)
                            portNo = jObject["ServicePort"].ToString();
                    }
                }

                var host = WebHost.CreateDefaultBuilder(args) //webHostArgs
                                    .UseContentRoot(pathToContentRoot)
                                    .UseStartup<Startup>()
                                    .UseUrls("https://localhost:" + portNo)
                                    .Build();
                host.RunAsService();
            }
            else
            {
                CreateHostBuilder(args).Build().Run();
            }
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)