DanDan
DanDan

Reputation: 10562

Giving .NET program an output type of windows application and console application

I have a C# Application that has a GUI and has its output type set as Windows Application. I would also like to invoke it from the command line (via parameters) and thus it needs to also be a Console Application.

Is there a way to get my application to run both as a Windows Application and as a Console Application?
Is there a way to set this at run time or is it a compile time setting?

Upvotes: 10

Views: 4869

Answers (4)

Hans Passant
Hans Passant

Reputation: 941605

You can attach the console. Make the code in Program.cs look like this:

    [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);

Upvotes: 11

Graham Clark
Graham Clark

Reputation: 12966

It's a compile-time setting: there's a target: option on the csc compiler. /target:winexe builds a Windows application (i.e. with a GUI); /target:exe builds a console application. Both types of application can accept command line arguments, though.

Upvotes: 1

Bartłomiej Mucha
Bartłomiej Mucha

Reputation: 2782

Even your applications output type is set as Windows application, you can still invoke it from the command line and pass arguments.

Just change your Main method definition to : static void Main(string[] args) {...} and you have access to passed arguments in 'args' variable.

Upvotes: 0

João Angelo
João Angelo

Reputation: 57688

A Windows Forms application can accept command line arguments. You just need to handle this case in your main function before showing the application Main form.

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());
    }
}

Upvotes: 1

Related Questions