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 a console application? Is there a way to set this at run time or is it a compile time setting?
views:
52answers:
4A 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());
}
}
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.
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.
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);