控制台应用程序也将 运行 作为 GUI

Console Application to be run as GUI as well

Before anyone marks this as Duplicate, Please read

我有一个 Windows Application 的进程,是用 C# 编写的。

现在我有一个要求,我也想从控制台 运行 这个。像这样。

因为我需要向控制台显示输出,所以我将应用程序类型更改为 Console Application

现在的问题是,每当用户从 Windows 资源管理器(通过双击)启动进程时。控制台window也在后面打开。

有没有办法避免这种情况?

在@PatrickHofman 的帮助下我尝试了什么。

但是我还有问题

好吧,我觉得我会玩这个,因为我很好奇。

  • 首先,我更新了 Program.cs 中的 Main 方法以获取参数,因此我可以指定 -cli 并在命令行上将应用程序设置为 运行。
  • 其次,我在项目属性中将项目的输出类型更改为 "console application"。
  • 第三我在Program.cs

    中添加了以下方法
    private static void HideConsoleWindow()
    {
        var handle = GetConsoleWindow();
    
        ShowWindow(handle, 0);
    }
    
    [DllImport("kernel32.dll")]
    static extern IntPtr GetConsoleWindow();
    
    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    
  • 第四个我调用HideConsoleWindow作为非CLI模式下的第一个动作

完成这些步骤后,我的(基本)应用程序如下所示:

    [STAThread]
    static void Main(string[] args)
    {
        if (args.Any() && args[0] == "-cli")
        {
            Console.WriteLine("Console app");
        }
        else
        {
            HideConsoleWindow();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

然后,如果我使用 -cli 在命令行上打开程序,将它 运行 作为命令行应用程序并将内容打印到命令行,如果我 运行 它通常会加载命令行 window(非常)短暂,然后如您所料作为普通应用程序加载。