如何抑制运行 C# Winforms 应用程序时弹出的黑壳?

Posted

技术标签:

【中文标题】如何抑制运行 C# Winforms 应用程序时弹出的黑壳?【英文标题】:How Can I Suppress the Black Shell that Pops Up When I Run my C# Winforms Application? 【发布时间】:2020-11-04 00:09:54 【问题描述】:

当我通过单击 .exe 文件运行我的 C# 应用程序(在 VS 中编译,发布版本)时,我会得到一个黑色外壳以及我的 GUI。我不确定为什么会出现这个黑色外壳,因为它没有出现在我的任何其他 GUI 应用程序中。怎么压制黑壳?我是不是不小心点击了编译前不应该点击的东西?

如下所示,我的 GUI 应用程序和黑色外壳(在应用程序后面)。

以下是我执行应用程序的目录结构:

【问题讨论】:

你确定你没有创建进程吗? 【参考方案1】:

如果项目1的“输出类型”不小心从“Windows应用程序”更改为“控制台应用程序”,你会得到非常类似的症状。

假设您从 Windows 应用程序模板开始,您的主线程仍将是 STA,并且没有任何东西可以阻止控制台应用程序运行 Windows 消息循环并显示 UI(因为模板已设置)。但是您总是会得到一个附加到控制台应用程序的控制台窗口。

如果发生这种情况,您只需将输出类型改回 Windows 应用程序即可。


1项目属性,应用程序选项卡。

【讨论】:

你是对的。它被设置为控制台应用程序。我已将其更改为 Windows 应用程序,黑色外壳消失了,应用程序按预期运行。【参考方案2】:

默认情况下,Winforms 应用程序不显示控制台,这是您需要主动调用的。这通常是通过调用原生的AllocConsole 函数来完成的:

https://www.pinvoke.net/default.aspx/kernel32.allocconsole

我会搜索代码库,看看是否在任何地方都调用了 AllocConsole

【讨论】:

以上是关于如何抑制运行 C# Winforms 应用程序时弹出的黑壳?的主要内容,如果未能解决你的问题,请参考以下文章

您如何解决此参数无效错误? (C#、VisualStudio、WinForms)

C# CefSharp如何在Winforms应用程序中使用

如何在 C# Winforms 表单之间转换?

如何创建悬停的 C# Winforms 控件

C# WinForms 使用 FlashLight 内置到运行 Windows 10 Professional x64 的移动设备中

编译基于 C# 的 Windows(WinForms 应用程序)应用程序以在 Mac OS High Sierra 或 Mojave 上运行