我有一个简单的应用程序,我想通过开关实现自动化。但是当我通过开关运行它时,我真的不希望显示用户界面。我只是想让它运行,完成它的工作,在控制台中打印出一些东西,然后退出。另一方面,如果我不使用任何开关运行它,我希望弹出用户界面。在这种情况下,我真的不想让控制台窗口在后台徘徊。
有什么方法可以做到这一点,还是我必须创建两个单独的项目,一个控制台应用程序和一个 Windows 应用程序?
最佳答案
虽然不完全符合您的要求,但我在过去通过使用 FreeConsole 实现了这种行为的外观 pInvoke 以删除控制台窗口。
您将项目的输出类型设置为控制台应用程序。然后定义对 FreeConsole
的外部调用:
[DllImport("kernel32.dll", SetLastError=true)]
private static extern int FreeConsole();
然后,在您的 Main
方法中,您根据您的条件进行切换。如果您需要 UI,请在打开表单之前调用 FreeConsole
以清除控制台窗口。
if (asWinForms)
{
FreeConsole();
Application.Run(new MainForm());
}
else
{
// console logic here
}
控制台窗口确实会在启动时短暂出现,但在我的情况下是可以接受的。
这有点乱,而且有难闻的气味,所以我会认真考虑你是否真的想走这条路。
关于C#:是否可以根据开关让单个应用程序充当控制台或 Windows 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1786840/