Reputation: 10562
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
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
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
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
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