2009-04-12 10 views

risposta

37

Chiama Environment.GetCommandLineArgs().

+2

GetCommandLineArgs è [gravemente lacunosa] (http://stackoverflow.com/questions/9287812/backslash-and-quote-in-command-line-arguments). Evitare. Diffondere la parola. – Neolisk

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

In realtà, questo non sembra funzionare. Sembra sempre vuoto. Vedi http://stackoverflow.com/questions/344056/why-is-startinfo-processstartinfo-always-empty – Carsten

1

Creare una classe che contenga le opzioni dell'applicazione. Nel metodo main create un'istanza di quella classe, inizializzatela con gli argomenti della riga di comando e passatela nelle classi che ne hanno bisogno.

In alternativa, è possibile inizializzare la classe in qualsiasi momento dopo averla creata tramite un metodo CustomConfigClass.Create() che utilizza Environment.GetCommandLineArgs().

La prima opzione sarebbe la mia raccomandazione, perché rende la classe più semplice da preparare per il test dell'unità e passare a un metodo di configurazione alternativo in un secondo momento senza interrompere l'applicazione a causa di una dipendenza dalla riga di comando.

+0

La prima opzione richiede ancora il metodo principale per conoscere l'altra classe, quindi non risolve il mio problema. Sto utilizzando un contenitore IOC, quindi creerò un servizio che espone la funzionalità GetCommandLineArgs e che fa in modo che il mio altro servizio dipenda da esso. Grazie. –

+1

Tuttavia, questo mi manca leggermente. Se stai usando IoC, allora non hai un servizio per restituire gli argomenti della riga di comando, avere un'interfaccia di servizio che restituisce la configurazione e implementarla con una classe che la ottiene dalla riga di comando. In questo modo puoi sostituire con un'altra classe per il test delle unità. –

-2

String [] myStr = Environment.GetCommandLineArgs();

è sempre buono per completare l'esempio.

4

Se si utilizza .NET Compact Framework, Environment.GetCommandLineArgs() metodo non è implementato e System.Diagnostics.Process.GetCurrentProcess(). StartInfo.Arguments restituisce sempre una stringa vuota, in modo da è necessario utilizzare la funzione principale e passa argomenti alle altre classi.

Un esempio:

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

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

Grazie per il controllo di Framework compatto. Nel mio caso non volevo mostrare il modulo principale quando sono stati specificati gli argomenti, in modo che l'exe fosse eseguito in modalità silenziosa, ma come suggerito si potevano archiviare questi argomenti sulla classe statica che sarebbe disponibile per tutte le forme del applicazione. Questo dovrebbe funzionare in qualsiasi contesto. Per chi fosse interessato ecco il mio codice. [MTAThread] vuoto statico Principale (stringa [] cmd) { if (cmd.Length == 0) Application.Run (new frmMain()); altro MessageBox.Show (cmd [0]); } – kuklei

Problemi correlati