50 votes

Application C # GUI et ligne de commande

J'ai actuellement une application avec une interface graphique.

Serait-il possible d'utiliser cette même application à partir de la ligne de commande (sans interface graphique et avec des paramètres d'utilisation).

Ou dois-je créer un .exe distinct (et une application) pour l'outil de ligne de commande?

68voto

Merlyn Morgan-Graham Points 31815
  1. Modifier les propriétés de votre projet pour que votre application soit une "Application Windows" (pas de "Console Application"). Vous pouvez toujours accepter les paramètres de ligne de commande de cette façon. Si vous ne le faites pas, alors une fenêtre de console s'affichera lorsque vous double-cliquez sur l'icône de l'application.
  2. Assurez-vous que votre Main fonction accepte des paramètres de ligne de commande.
  3. Ne pas afficher la fenêtre si vous avez des paramètres de ligne de commande.

Voici un court exemple:

[STAThread]
static void Main(string[] args)
{
    if(args.Length == 0)
    {
        Application.Run(new MyMainForm());
    }
    else
    {
        // Do command line/silent logic here...
    }
}

Si votre application n'est pas déjà structuré à proprement taire traitement (si toute votre logique est coincé dans votre WinForm code), vous pouvez pirater le silence de traitement en ala CharithJ de réponse.

EDIT par OP Désolé de détourner votre réponse Merlyn. Veux juste toutes les infos ici pour les autres.

Pour être en mesure d'écrire dans la console dans une application WinForms juste faire ce qui suit:

static class Program
{
    // defines for commandline output
    [DllImport("kernel32.dll")]
    static extern bool AttachConsole(int dwProcessId);
    private const int ATTACH_PARENT_PROCESS = -1;

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        // redirect console output to parent process;
        // must be before any calls to Console.WriteLine()
        AttachConsole(ATTACH_PARENT_PROCESS);

        if (args.Length > 0)
        {
            Console.WriteLine("Yay! I have just created a commandline tool.");
            // sending the enter key is not really needed, but otherwise the user thinks the app is still running by looking at the commandline. The enter key takes care of displaying the prompt again.
            System.Windows.Forms.SendKeys.SendWait("{ENTER}");
            Application.Exit();
        }
        else
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new QrCodeSampleApp());
        }
    }
}

10voto

CharithJ Points 15364

Dans votre classe program.cs, conservez la méthode Main telle quelle, mais ajoutez string[] Args au formulaire principal. Par exemple...

     [STAThread]
    static void Main(string[] Args)
    {
        ....
        Application.Run(new mainform(Args));
    }
 

Dans le constructeur mainform.cs

     public mainform(string[] Args)
    {
        InitializeComponent();

        if (Args.Length > 0)
         {
             // Do what you want to do as command line application.
             // You can hide the form and do processing silently.
             // Remember to close the form after processing.
         }
    }
 

-2voto

Arun Points 1853

Vous devrez peut-être structurer votre application en tant qu'application console, identifier ce que vous faites sur les "Actions" - comme cliquer sur le bouton - dans une classe distincte, inclure un formulaire qui peut être affiché si aucun argument de ligne de commande n'a été fourni, et gérer les événements en les routant vers les méthodes courantes de votre classe "Action".

-3voto

Bill Yan Points 719

Je pense que c'est possible, il suffit de régler votre sous-système sur "console", vous verrez une fenêtre de console ainsi que la fenêtre GUI.

Mais pour accepter les commandes de la fenêtre de la console, je suppose que vous devrez créer un thread supplémentaire pour le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X