Question

J'essaie de créer une application WPF qui accepte les arguments de ligne de commande. Si aucun argument n'est fourni, la fenêtre principale devrait apparaître. Dans le cas d'arguments spécifiques de la ligne de commande, le code doit être exécuté sans interface graphique et se quitter une fois l'opération terminée. Toute suggestion sur la manière de procéder devrait être appréciée.

Était-ce utile?

La solution

Tout d'abord, recherchez cet attribut en haut de votre fichier App.xaml et supprimez-le:

StartupUri="Window1.xaml"

Cela signifie que l'application ne va pas instancier automatiquement votre fenêtre principale et la montrer.

Ensuite, remplacez la méthode OnStartup dans votre classe App pour exécuter la logique:

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

Autres conseils

Pour vérifier l'existence de votre argument - dans la solution de Matt, utilisez ceci pour votre test:

e.Args.Contains ("MyTriggerArg")

Une combinaison des solutions ci-dessus, pour .NET 4.0+ avec sortie vers la 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);
}

Modifiez le constructeur de votre fenêtre principale pour accepter les arguments:

public partial class MainWindow : Window
{
    public MainWindow(StartupEventArgs e)
    {
        InitializeComponent();
    }
}

Et n'oubliez pas de supprimer:

StartupUri="MainWindow.xaml"

Vous pouvez utiliser ce qui suit dans le fichier 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
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top