2009-04-12 7 views

Répondre

37

Appelez Environment.GetCommandLineArgs().

+2

GetCommandLineArgs est [gravement viciée] (http://stackoverflow.com/questions/9287812/backslash-and-quote-in-command-line-arguments). Éviter. Passez le mot. – Neolisk

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

En fait, cela ne semble pas fonctionner. Il semble toujours vide. Voir http://stackoverflow.com/questions/344056/why-is-startinfo-processstartinfo-always-empty – Carsten

1

Créez une classe qui contient les options de votre application. Dans la méthode principale, créez une instance de cette classe, initialisez-la avec les arguments de la ligne de commande et transmettez-la aux classes qui en ont besoin.

Vous pouvez également initialiser la classe à tout moment par la suite en la faisant créer via une méthode CustomConfigClass.Create() qui utilise Environment.GetCommandLineArgs(). La première option serait ma recommandation, car elle rend la classe plus facile à préparer pour les tests unitaires et passer à une autre méthode de configuration à une date ultérieure sans casser l'application en raison d'une dépendance à la ligne de commande.

+0

La première option nécessite toujours la méthode principale pour connaître l'autre classe, donc cela ne résout pas mon problème. J'utilise un conteneur IOC, par conséquent je vais créer un service qui expose la fonctionnalité GetCommandLineArgs et en rende mon autre service. Merci. –

+1

Cela manque légèrement mon point, cependant. Si vous utilisez IoC, alors ne disposez pas d'un service pour retourner les arguments de la ligne de commande, avoir une interface de service qui retourne la configuration, et l'implémenter avec une classe qui l'obtient à partir de la ligne de commande. De cette façon, vous pouvez remplacer avec une autre classe pour les tests unitaires. –

-2

Chaîne [] myStr = Environnement.GetCommandLineArgs();

c'est toujours bon pour compléter l'exemple.

4

Si vous utilisez la méthode Compact Framework .NET, Environment.GetCommandLineArgs() ne sont pas mis en œuvre et System.Diagnostics.Process.GetCurrentProcess(). StartInfo.Arguments retourne toujours une chaîne vide, alors vous devez utiliser la fonction principale et passez des arguments à vos autres classes.

Un exemple:

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

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

Merci pour le heads-up du Compact Framework. Dans mon cas, je ne voulais pas montrer le formulaire principal quand les arguments étaient spécifiés, de sorte que l'exe fonctionnerait en mode silencieux, mais comme vous l'avez suggéré, vous pouvez stocker ces arguments sur la classe statique qui serait disponible pour toutes les formes. application. Cela devrait fonctionner dans n'importe quel cadre. Pour ceux qui étaient intéressés ici, c'était mon code. [MTAThread] static void Main (Chaîne [] cmd) { if (cmd.Length == 0) Application.Run (nouveau frmMain()); sinon MessageBox.Show (cmd [0]); } – kuklei

Questions connexes