C# 混合windows窗体和控制台应用程序,在窗体模式下不带控制台窗口

C# 混合windows窗体和控制台应用程序,在窗体模式下不带控制台窗口,c#,winforms,user-interface,console-application,C#,Winforms,User Interface,Console Application,我想创建一个完整的混合应用程序,既可以作为Windows窗体也可以作为控制台应用程序。当我在没有参数或不在控制台中执行它时,我希望应用程序打开GUI并离开控制台,就像从控制台调用普通Windows窗体应用程序一样,但在通知某些参数时,通过控制台响应用户并与他交互,如接受条款和条件或确认文件覆盖。可能吗 注意:我不介意在运行GUI时有控制台输出,但我希望在GUI上运行时控制台保持隐藏,在作为控制台运行时没有GUI 注意 在中提出的解决方案(创建表单项目,然后更改为控制台)没有引起我的注意,因为当从

我想创建一个完整的混合应用程序,既可以作为
Windows窗体
也可以作为
控制台应用程序
。当我在没有参数或不在控制台中执行它时,我希望应用程序打开GUI并离开控制台,就像从控制台调用普通Windows窗体应用程序一样,但在通知某些参数时,通过控制台响应用户并与他交互,如接受条款和条件或确认文件覆盖。可能吗

注意:我不介意在运行GUI时有控制台输出,但我希望在GUI上运行时控制台保持隐藏,在作为控制台运行时没有GUI

注意


在中提出的解决方案(创建表单项目,然后更改为控制台)没有引起我的注意,因为当从资源管理器调用应用程序时,它会打开一个控制台窗口。

WinForms和console应用程序之间的区别在于,它们的编译方式略有不同(请参见此)。控制台应用程序在清单中具有以下标志:

.子系统0x0003//WINDOWS\u CUI

和WinForms应用程序包括以下内容:

.子系统0x0002//WINDOWS\u GUI

与这个话题相关的问题很多。例如,请看这个。 一般来说,据我所知,没有理想的解决方案,但有些解决方案在某种程度上是有效的。例如,试试这个:

  • 创建WinForms应用程序
  • 从中复制代码
  • 修改WinForms应用程序的主方法,如下所示
  • 修改后的主要方法:

    这种解决方案的缺点是:

  • 无法将控制台应用程序的输出重定向到文件
  • 如果从命令行启动,则必须通过按键显式关闭控制台应用程序
  • 阅读我上面提到的文章中的评论和重要内容

  • WinForms和Console应用程序之间的区别在于,它们的编译方式略有不同(见下图)。控制台应用程序在清单中具有以下标志:

    .子系统0x0003//WINDOWS\u CUI

    和WinForms应用程序包括以下内容:

    .子系统0x0002//WINDOWS\u GUI

    与这个话题相关的问题很多。例如,请看这个。 一般来说,据我所知,没有理想的解决方案,但有些解决方案在某种程度上是有效的。例如,试试这个:

  • 创建WinForms应用程序
  • 从中复制代码
  • 修改WinForms应用程序的主方法,如下所示
  • 修改后的主要方法:

    这种解决方案的缺点是:

  • 无法将控制台应用程序的输出重定向到文件
  • 如果从命令行启动,则必须通过按键显式关闭控制台应用程序
  • 阅读我上面提到的文章中的评论和重要内容

  • 谢谢你,迈克!这并没有满足我的愿望,但可以解释为什么我不能以我想要的方式实现我的愿望。谢谢你,迈克尔!这并没有满足我的愿望,但可以解释为什么我不能以我想要的方式实现我的愿望。
    [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();
       }
    }