问题描述
我创建了一个 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 (将#修改为@)