Я пытаюсь создать приложение WPF, которое принимает аргументы командной строки. Если аргументы не заданы, главное окно должно появиться. В случае некоторых конкретных аргументов командной строки код должен запускаться без GUI и выходить по завершении. Любые предложения относительно того, как это должно быть сделано должным образом, будут оценены.
Командная строка WPF
Ответ 1
Сначала найдите этот атрибут в верхней части вашего файла App.xaml и удалите его:
StartupUri="Window1.xaml"
Это означает, что приложение не будет автоматически создавать ваше главное окно и показывать его.
Далее, переопределите метод OnStartup в вашем классе App для выполнения логики:
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();
}
		Ответ 2
Чтобы проверить наличие вашего аргумента - в решении Matt используйте это для вашего теста:
e.Args.Contains( "MyTriggerArg" )
Ответ 3
Комбинация вышеуказанных решений для .NET 4.0+ с выходом на консоль:
[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);
}
Измените конструктор в MainWindow для принятия аргументов:
public partial class MainWindow : Window
{
    public MainWindow(StartupEventArgs e)
    {
        InitializeComponent();
    }
}
И не забудьте удалить:
StartupUri="MainWindow.xaml"
		Ответ 4
Вы можете использовать ниже в файле app.xaml.cs:
private void Application_Startup(object sender, StartupEventArgs e)
{
    MainWindow WindowToDisplay = new MainWindow();
    if (e.Args.Length == 0)
    {
        WindowToDisplay.Show();
    }
    else
    {
        string FirstArgument = e.Args[0].ToString();
        string SecondArgument = e.Args[1].ToString();
        //your logic here
    }
}