WPF Command Line

前端 未结 4 1718
谎友^
谎友^ 2020-11-27 12:32

I am trying to create a WPF application that takes command line arguments. If no arguments are given, the main window should pop up. In cases of some specific command line a

相关标签:
4条回答
  • 2020-11-27 13:10

    You can use the below in app.xaml.cs file :

    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
        }
    }
    
    0 讨论(0)
  • 2020-11-27 13:18

    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();
    }
    
    0 讨论(0)
  • 2020-11-27 13:21

    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"
    
    0 讨论(0)
  • 2020-11-27 13:29

    To check for the existence of your argument - in Matt's solution use this for your test:

    e.Args.Contains("MyTriggerArg")

    0 讨论(0)
提交回复
热议问题