C#:是否可以根据开关让单个应用程序充当控制台或 Windows 应用程序?

标签 c# console-application windows

我有一个简单的应用程序,我想通过开关实现自动化。但是当我通过开关运行它时,我真的不希望显示用户界面。我只是想让它运行,完成它的工作,在控制台中打印出一些东西,然后退出。另一方面,如果我不使用任何开关运行它,我希望弹出用户界面。在这种情况下,我真的不想让控制台窗口在后台徘徊。

有什么方法可以做到这一点,还是我必须创建两个单独的项目,一个控制台应用程序和一个 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/

相关文章:

C#:Windows 7 机器的登录历史记录

windows - 如何在Windows中自动同步日期和时间?

windows - Windows 上的 Docker 工具箱 : disable TLS

c# - 插入语句/存储过程死锁

c# - .net 字典和查找添加/更新

c# - 什么是 pfxblob

c# - 在 ASP.NET 中,在 ListView 内的 div 中添加动态单选按钮列表

c# - 聚合异常不包含所有任务异常?

c# - 一种存储信息的方法

c - 如何从内存使用情况中随机生成种子?