WPF命令行

我正在尝试创build一个WPF应用程序,它采用命令行参数。 如果没有给出参数,主窗口应该popup。 在某些特定命令行参数的情况下,代码应该在没有GUI的情况下运行,并在完成时退出。 任何build议如何适当做这将不胜感激。

首先,在App.xaml文件的顶部find这个属性并删除它:

StartupUri="Window1.xaml" 

这意味着应用程序不会自动实例化主窗口并显示它。

接下来,重写App类中的OnStartup方法来执行逻辑:

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

检查你的论点的存在 – 在马特的解决scheme中使用这个为你的testing:

e.Args.Contains( “MyTriggerArg”)

以上解决scheme的组合,对于.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" 

你可以在app.xaml.cs文件中使用下面的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 } }