表单模式下没有控制台 window 的混合 windows 表单和控制台应用程序
Hybrid windows forms and console app without console window in forms mode
我想创建一个完整的混合应用程序,既可以作为 Windows Forms
又可以作为 Console Application
。当我不带参数或不在控制台中执行它时,我希望应用程序打开 GUI 并离开控制台,就像普通的 Windows Forms 应用程序在从控制台调用时所做的那样,但要响应用户并进行交互当一些参数被告知时,比如接受条款和条件或确认文件覆盖时,与他一起通过控制台。这可能吗?
P.S.: 我不介意在 运行 GUI 时有控制台输出,但我希望控制台在 运行 在 GUI 上时保持隐藏状态,而在没有 GUI 时运行 作为控制台。
注意
how to run a winform from console application? 中建议的解决方案(创建一个表单项目,然后更改为控制台)不适合我,因为当从资源管理器调用应用程序时,它会打开一个控制台 window。
WinForms 和 Console 应用程序之间的区别在于它们的编译方式略有不同(参见 question)。控制台应用程序在清单中具有以下标志:
.子系统 0x0003 // WINDOWS_CUI
WinForms 应用如下:
.子系统 0x0002 // WINDOWS_GUI
与此主题相关的问题很多。例如,请参阅此 one。
一般来说,据我所知,没有理想的解决方案,但有一些解决方案在一定程度上起作用。例如试试这个:
- 创建 WinForms 应用程序。
- 从 site 中复制代码。
- 修改WinForms应用程序的Main方法,如下所示。
修改后的Main方法:
[STAThread]
private static void Main(string[] args)
{
if (args.Length == 0)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
AllocateConsole();
Console.WriteLine("I'm a console application");
//...
FreeConsole();
}
}
此解决方案的缺点是:
- 无法将输出从控制台应用程序重定向到文件。
- 如果从命令行启动控制台应用程序,则必须通过按键明确关闭。
- 另请阅读我在上面指出的文章中的备注和重要内容。
我想创建一个完整的混合应用程序,既可以作为 Windows Forms
又可以作为 Console Application
。当我不带参数或不在控制台中执行它时,我希望应用程序打开 GUI 并离开控制台,就像普通的 Windows Forms 应用程序在从控制台调用时所做的那样,但要响应用户并进行交互当一些参数被告知时,比如接受条款和条件或确认文件覆盖时,与他一起通过控制台。这可能吗?
P.S.: 我不介意在 运行 GUI 时有控制台输出,但我希望控制台在 运行 在 GUI 上时保持隐藏状态,而在没有 GUI 时运行 作为控制台。
注意
how to run a winform from console application? 中建议的解决方案(创建一个表单项目,然后更改为控制台)不适合我,因为当从资源管理器调用应用程序时,它会打开一个控制台 window。
WinForms 和 Console 应用程序之间的区别在于它们的编译方式略有不同(参见 question)。控制台应用程序在清单中具有以下标志:
.子系统 0x0003 // WINDOWS_CUI
WinForms 应用如下:
.子系统 0x0002 // WINDOWS_GUI
与此主题相关的问题很多。例如,请参阅此 one。 一般来说,据我所知,没有理想的解决方案,但有一些解决方案在一定程度上起作用。例如试试这个:
- 创建 WinForms 应用程序。
- 从 site 中复制代码。
- 修改WinForms应用程序的Main方法,如下所示。
修改后的Main方法:
[STAThread]
private static void Main(string[] args)
{
if (args.Length == 0)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
AllocateConsole();
Console.WriteLine("I'm a console application");
//...
FreeConsole();
}
}
此解决方案的缺点是:
- 无法将输出从控制台应用程序重定向到文件。
- 如果从命令行启动控制台应用程序,则必须通过按键明确关闭。
- 另请阅读我在上面指出的文章中的备注和重要内容。