Línea de comando WPF
command-line exit (4)
Intento crear una aplicación WPF que tome argumentos de línea de comando. Si no se dan argumentos, la ventana principal debería aparecer. En el caso de algunos argumentos específicos de la línea de comando, el código debe ejecutarse sin GUI y salir cuando finalice. Cualquier sugerencia sobre cómo debería hacerse esto adecuadamente sería apreciada.
Para verificar la existencia de su argumento, en la solución de Matt, use esto para su prueba:
e.Args.Contains ("MyTriggerArg")
Primero, encuentre este atributo en la parte superior de su archivo App.xaml y elimínelo:
StartupUri="Window1.xaml"
Eso significa que la aplicación no instanciará automáticamente su ventana principal y lo mostrará.
A continuación, anule el método OnStartup en su clase de aplicación para realizar la lógica:
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();
}
Puede usar lo siguiente en el archivo 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
}
}
Una combinación de las soluciones anteriores, para .NET 4.0+ con salida a la consola:
[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);
}
Altere el constructor en su MainWindow para aceptar argumentos:
public partial class MainWindow : Window
{
public MainWindow(StartupEventArgs e)
{
InitializeComponent();
}
}
Y no te olvides de eliminar:
StartupUri="MainWindow.xaml"