2009-04-12 21 views

Respuesta

37

Llamada Environment.GetCommandLineArgs().

+2

GetCommandLineArgs es [seriamente defectuoso] (http://stackoverflow.com/questions/9287812/backslash-and-quote-in-command-line-arguments). Evitar. Difundir la palabra. – Neolisk

1
System.Diagnostics.Process.GetCurrentProcess().StartInfo.Arguments 
+0

En realidad, esto no parece funcionar. Parece siempre vacío. Consulte http://stackoverflow.com/questions/344056/why-is-startinfo-processstartinfo-always-empty – Carsten

1

Cree una clase que contenga las opciones de su aplicación. En el método principal, cree una instancia de esa clase, inicialícela con los argumentos de línea de comando y páselo a las clases que lo necesiten.

Como alternativa, puede hacer que la clase se inicialice en cualquier momento posterior al crearla a través de un método CustomConfigClass.Create() que usa Environment.GetCommandLineArgs().

La primera opción es mi recomendación, porque facilita la preparación de la clase para las pruebas unitarias y cambia a un método alternativo de configuración en una fecha posterior sin interrumpir la aplicación debido a una dependencia en la línea de comandos.

+0

La primera opción todavía requiere que el método principal sepa sobre la otra clase, por lo que no resuelve mi problema. Estoy usando un contenedor IOC, por lo tanto, crearé un servicio que exponga la funcionalidad GetCommandLineArgs y haga que mi otro servicio dependa de él. Gracias. –

+1

Sin embargo, me equivoco un poco. Si está utilizando IoC, entonces no tiene un servicio para devolver los argumentos de línea de comando, tiene una interfaz de servicio que devuelve la configuración, y la implementa con una clase que la obtiene desde la línea de comando. De esa forma puedes reemplazar con otra clase para probar la unidad. –

-2

Cadena [] myStr = Environment.GetCommandLineArgs();

siempre es bueno para completar el ejemplo.

4

Si utiliza .NET Compact Framework, Environment.GetCommandLineArgs() método no se implementa y System.Diagnostics.Process.GetCurrentProcess(). StartInfo.Arguments siempre devuelve una cadena vacía, por lo debe utilizar la función principal y pasa argumentos a tus otras clases.

Un ejemplo:

[MTAThread] 
static void Main(String[] commandLineArguments) 
{ 
    CommandLineHelper.parse(commandLineArguments); 
} 

public static class CommandLineHelper 
{ 
    public static void parse(String[] commandLineArguments) { 
    // add your code here 
    } 
} 
+0

Gracias por el armazón de Compact Framework. En mi caso, no quería mostrar el formulario principal cuando se especificaron args, para que el exe se ejecutara en modo silencioso, pero como ha sugerido, podría almacenar esos argumentos en la clase estática que estaría disponible para todas las formas del solicitud. Esto debería funcionar en cualquier marco. Para aquellos interesados ​​aquí estaba mi código. [MTAThread] static void Main (String [] cmd) { if (cmd.Length == 0) Application.Run (new frmMain()); else MessageBox.Show (cmd [0]); } – kuklei

Cuestiones relacionadas