如何隐藏 Kestrel 控制台?

18 浏览
0 Comments

如何隐藏 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();

谢谢

0
0 Comments

如何隐藏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/…中的示例。

0