为.NET程序提供输出类型的Windows应用程序和控制台应用程序

时间:2010-09-06 14:20:32

标签: .net console-application windows

我有一个具有GUI的C#应用​​程序,其输出类型设置为Windows应用程序。我还想从命令行调用它(通过参数),因此它也需要是一个控制台应用程序。

有没有办法让我的应用程序同时作为Windows应用程序和控制台应用程序运行? 有没有办法在运行时设置它,还是编译时设置?

4 个答案:

答案 0 :(得分:8)

您可以附加控制台。使Program.cs中的代码如下所示:

    [STAThread]
    static void Main(string[] args) {
        if (args.Length > 0) {
            AttachConsole(-1);
            Console.WriteLine("");
            Console.WriteLine("Running in console, press ENTER to continue");
            Console.ReadLine();
        }
        else {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
    [System.Runtime.InteropServices.DllImport("kernel32.dll")]
    private static extern bool AttachConsole(int pid);

答案 1 :(得分:1)

Windows窗体应用程序可以接受命令行参数。在显示应用程序主窗体之前,您只需要在main函数中处理这种情况。

static void Main(string[] args)
{
    if (args.Length > 0)
    {
        // Run it without Windows Forms GUI
    }
    else
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }
}

答案 2 :(得分:1)

这是一个编译时设置:target:编译器上有csc选项。 /target:winexe构建Windows应用程序(即使用GUI); /target:exe构建一个控制台应用程序。但是,这两种类型的应用程序都可以接受命令行参数。

答案 3 :(得分:0)

即使您的应用程序输出类型设置为Windows应用程序,您仍然可以从命令行调用它并传递参数。

只需将Main方法定义更改为:static void Main(string [] args){...} 并且您可以访问'args'变量中传递的参数。