如何隐藏 Kestrel 控制台?
如何隐藏 Kestrel 控制台?
我有一个 .net core 应用程序,我想要在后台运行,但似乎无法摆脱 Kestrel 的控制台窗口。有没有办法在不将应用程序作为 Windows 服务运行的情况下隐藏它?我尝试过删除与 Logger 相关的任何引用,但没有帮助。
这是我的 Program.Main:
var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json", optional: true) .Build(); var hostingUrl = config.GetValue("HostingUrl"); if (string.IsNullOrEmpty(hostingUrl)) { var xmlString = File.ReadAllText(Consts.WebHostBaseFolder + "\\web.config"); var confDoc = XDocument.Parse(xmlString); hostingUrl = confDoc.Element("configuration").Element("appSettings")?.Elements("add")?.FirstOrDefault(e => e.Attribute("key").Value == "HostingUrl")?.Attribute("value")?.Value ?? ""; } var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Consts.WebHostBaseFolder) .UseStartup () .UseUrls(hostingUrl) .Build(); host.Run();
谢谢
如何隐藏Kestrel控制台?
问题出现的原因:Kestrel是一个用于ASP.NET Core的跨平台Web服务器,当运行Kestrel时,默认会显示控制台窗口。然而,有时候我们希望隐藏这个控制台窗口。
解决方法:有两种方法可以隐藏Kestrel控制台。
方法一是使用editbin.exe工具,具体操作如下:
1. 在Microsoft的官方文档https://github.com/AvaloniaUI/Avalonia/wiki/Hide-console-window-for-self-contained-.NET-Core-application中,找到editbin.exe的使用方法。
2. 在命令行中运行以下命令:
editbin.exe /subsystem:windows yourapp.exe
,其中yourapp.exe是你的应用程序的名称。
方法二是将ASP.NET Core应用程序托管到Windows服务中,具体操作如下:
1. 阅读Microsoft的官方文档https://learn.microsoft.com/en-us/aspnet/core/hosting/windows-service,了解如何将ASP.NET Core应用程序托管到Windows服务中。
2. 将ASP.NET Core应用程序打包成一个Windows服务,这样就可以隐藏掉Kestrel控制台。
然而,需要注意的是,将应用程序托管到Windows服务中会带来一些限制和问题。Windows服务运行在不同的安全上下文中,安装和卸载过程较为复杂,无法访问具有GUI的内容,无法打开其他具有GUI的进程等等。因此,如果只是简单地隐藏Kestrel控制台,没有必要使用Windows服务。
从.NET Core 3.0开始,隐藏Kestrel控制台的解决方案变得更加简单。只需要在csproj文件中设置<OutputType>WinExe</OutputType>即可。
如果想要在隐藏Kestrel控制台后,通过UI元素、按钮或Windows图标停止应用程序,可以使用以下方法:
1. 在一个WinForms应用程序中包装.NET Core应用程序。
2. 在WinForms应用程序中启动.NET Core应用程序,并在关闭时终止它。
3. 在WinForms应用程序中添加一个通知图标,通过该图标来操作应用程序。
具体操作方法可以参考stackoverflow.com/questions/1472633/…中的示例。