没有分叉的C#Windows应用程序(或没有控制台窗口的控制台应用程序)

时间:2012-04-23 16:29:50

标签: c# windows multithreading console fork

  

可能重复:
  Can one executable be both a console and GUI app?

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

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

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

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

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

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

我看过人们提出类似问题的帖子,但找不到合适的答案(主要是受访者不了解分叉业务)。

我刚刚完成了这个应用程序的Cocoa(Mac)版本(这正是我在这里尝试实现的)。如果Windows版本无法做到,那将是一种耻辱。一定是可能的! : - )

任何想法都会受到赞赏。

0 个答案:

没有答案