WPF Command Line
First, find this attribute at the top of your App.xaml file and remove it:
StartupUri="Window1.xaml"
That means that the application won't automatically instantiate your main window and show it.
Next, override the OnStartup method in your App class to perform the logic:
protected override void OnStartup(StartupEventArgs e){ base.OnStartup(e); if ( /* test command-line params */ ) { /* do stuff without a GUI */ } else { new Window1().ShowDialog(); } this.Shutdown();}
To check for the existence of your argument - in Matt's solution use this for your test:
e.Args.Contains("MyTriggerArg")
A combination of the above solutions, for .NET 4.0+ with output to the console:
[DllImport("Kernel32.dll")]public static extern bool AttachConsole(int processID);protected override void OnStartup(StartupEventArgs e){ base.OnStartup(e); if (e.Args.Contains("--GUI")) { // Launch GUI and pass arguments in case you want to use them. new MainWindow(e).ShowDialog(); } else { //Do command line stuff if (e.Args.Length > 0) { string parameter = e.Args[0].ToString(); WriteToConsole(parameter); } } Shutdown();}public void WriteToConsole(string message){ AttachConsole(-1); Console.WriteLine(message);}
Alter the constructor in your MainWindow to accept arguments:
public partial class MainWindow : Window{ public MainWindow(StartupEventArgs e) { InitializeComponent(); }}
And don't forget to remove:
StartupUri="MainWindow.xaml"