Aplikacja C# zarówno GUI jak i linia poleceń

Obecnie mam aplikację z GUI.

Czy jest możliwe użycie tej samej aplikacji z linii poleceń(bez GUI i z użyciem parametrów).

Czy muszę tworzyć osobne .exe (i aplikacja) dla narzędzia wiersza poleceń?

Author: Merlyn Morgan-Graham, 2011-08-26

5 answers

  1. Edytuj właściwości projektu, aby aplikacja stała się" aplikacją Windows "(nie"aplikacją konsolową"). W ten sposób można nadal akceptować parametry wiersza poleceń. Jeśli tego nie zrobisz, po dwukrotnym kliknięciu ikony aplikacji pojawi się okno konsoli.
  2. Upewnij się, że twoja funkcja Main akceptuje parametry wiersza poleceń.
  3. nie pokazuj okna, jeśli masz jakieś parametry wiersza poleceń.

Oto krótki przykład:

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

Jeśli Twoja aplikacja nie jest jeszcze skonstruowane tak, aby czysto wykonywać ciche przetwarzanie (jeśli cała twoja logika jest zablokowana w kodzie WinForm), możesz zhakować ciche przetwarzanie w odpowiedzi ala CharithJ.

EDIT by OP Przepraszam, że przejmuję Twoją odpowiedź, Merlyn. Po prostu chcę wszystkich informacji tutaj dla innych.

Aby móc pisać na konsoli w aplikacji WinForms, wykonaj następujące czynności:

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());
        }
    }
}
 56
Author: Merlyn Morgan-Graham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:33

W twoim programie.Klasa cs zachowuje główną metodę taką jaką jest, ale dodaje string[] Args do głównej formy. Na przykład...

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

In mainform.CS constructor

    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.
         }
    }
 10
Author: CharithJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-26 00:53:09

Za mało punktów do komentowania. Chciałem dodać do przyjętego rozwiązania, że [DllImport ("kernel32.dll")] nie jest potrzebny do zapisu na konsoli podczas używania mingw do wywołania programu, wygląda na to, że jest to problem windows/dos.

 0
Author: user1529413,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-20 14:45:33

Być może będziesz musiał uporządkować swoją aplikację jako aplikację konsolową, zidentyfikować to, co robisz przy "akcjach" - jak kliknięcie przycisku-w osobną klasę, dołączyć formularz, który może być pokazany, jeśli nie podano argumentów linii poleceń, i obsłużyć zdarzenia przez przekierowanie ich do popularnych metod w klasie "Action".

 -1
Author: Arun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-26 00:47:37

Myślę, że jest to możliwe, po prostu ustaw podsystem na "console", zobaczysz okno konsoli oraz okno GUI.

Ale aby akceptować polecenia z okna konsoli, myślę, że będziesz musiał utworzyć dodatkowy wątek, aby to zrobić.

 -2
Author: Bill Yan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-26 00:09:35