2009-04-12 3 views

Antwort

37

Anruf Environment.GetCommandLineArgs().

+2

GetCommandLineArgs ist [ernsthaft fehlerhaft] (http://stackoverflow.com/questions/9287812/backslash-and-quote-in-command-line-arguments). Vermeiden. Verbreite das Wort. – Neolisk

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

Eigentlich scheint das nicht zu funktionieren. Es scheint immer leer zu sein. Siehe http://stackoverflow.com/questions/344056/why-is-startinfo-processstartinfo-always-empty – Carsten

1

Erstellen Sie eine Klasse, die die Optionen Ihrer Anwendung enthält. Erstellen Sie in der Hauptmethode eine Instanz dieser Klasse, initialisieren Sie sie mit den Befehlszeilenargumenten und übergeben Sie sie an die Klassen, die sie benötigen.

Alternativ können Sie die Klasse zu einem beliebigen späteren Zeitpunkt initialisieren, indem Sie sie über eine CustomConfigClass.Create()-Methode erstellen, die Environment.GetCommandLineArgs() verwendet.

Die erste Option wäre meine Empfehlung, weil es die Klasse einfacher macht, auf Komponententests vorzubereiten und zu einem späteren Zeitpunkt auf eine alternative Konfigurationsmethode umzusteigen, ohne die Anwendung aufgrund einer Abhängigkeit von der Befehlszeile zu unterbrechen.

+0

Die erste Option erfordert immer noch die wichtigste Methode, um über die andere Klasse zu wissen, damit es mein Problem nicht löst. Ich verwende einen IOC-Container, daher werde ich einen Dienst erstellen, der die GetCommandLineArgs-Funktionalität verfügbar macht und meinen anderen Dienst davon abhängig macht. Vielen Dank. –

+1

Das vermisst jedoch meinen Punkt leicht. Wenn Sie IoC verwenden, haben Sie keinen Dienst, um die Befehlszeilenargumente zurückzugeben, haben eine Serviceschnittstelle, die die Konfiguration zurückgibt, und implementieren diese mit einer Klasse, die sie von der Befehlszeile erhält. Auf diese Weise können Sie eine andere Klasse für Komponententests ersetzen. –

-2

String [] = myStr Environment.GetCommandLineArgs();

ist es immer gut, das Beispiel zu vervollständigen.

4

Wenn Sie .NET Compact Framework, Environment.GetCommandLineArgs() Methode nicht implementiert ist und System.Diagnostics.Process.GetCurrentProcess(). StartInfo.Arguments gibt immer leeren String, so Sie Hauptfunktion verwenden müssen und übergeben Sie Argumente an Ihre anderen Klassen.

Ein Beispiel:

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

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

Danke für das Compact Framework heads-up. In meinem Fall wollte ich das Hauptformular nicht anzeigen, wenn Argumente angegeben wurden, so dass die Exe im unbeaufsichtigten Modus ausgeführt werden würde, aber wie Sie vorgeschlagen haben, könnten Sie diese Argumente für die statische Klasse speichern, die für alle Formulare des Anwendung. Dies sollte in jedem Framework funktionieren. Für die Interessenten hier war mein Code. [MTAThread] static void Main (String [] cmd) { if (cmd.Length == 0) Application.Run (new frmMain()); sonst MessageBox.Show (cmd [0]); } – kuklei