3

可能重复:
一个可执行文件可以同时是控制台和 GUI 应用程序吗?

我正在用 C# 编写一个程序,默认情况下它作为标准的“Windows 应用程序”(项目属性-> 输出类型)运行。

它的正常行为是从快捷方式或其他任何方式运行并显示 GUI。

但是,对于某些命令行参数,它将作为控制台应用程序运行,不显示 GUI 并向调用 shell 返回一个退出代码。

我遇到了一个问题,如果我将它编译为“Windows 应用程序”,当它运行时,它会分叉并且父线程立即返回到调用进程,而程序仍然在一个独立的子线程中运行。这意味着它在终止时不能向调用进程返回退出代码,因为在程序启动和分叉时已经发生了这种情况。就调用进程所知,应用程序总是立即完成并返回零。

对于直接的控制台程序,答案很简单——将其编译为“控制台应用程序”。在这种情况下,应用程序不会在启动时分叉,调用进程会一直等到程序完成并返回退出代码。不幸的是,沿着这条路走下去,Windows 总是显示一个命令窗口(控制台,不管你怎么称呼它……大黑东西!),如果程序在其 GUI 模式下运行,这很讨厌。我想我可以调用一个 API 来隐藏那个窗口,但它仍然会瞬间闪现。

那么,有没有办法阻止“Windows 应用程序”在启动时分叉?或者有没有办法控制“控制台应用程序”是否显示控制台窗口?理想情况下,这将通过 C# 代码完成,让我能够根据命令行参数选择发生的事情。

我看到有人提出类似问题的帖子,但没有找到正确的答案(大多数情况下,受访者不了解分叉业务)。

我刚刚完成了这个应用程序的 Cocoa (Mac) 版本(这正是我在这里想要实现的)。如果Windows版本做不到,那就太可惜了。这一定是可能的!:-)

任何想法,将不胜感激。

4

0 回答 0