2016-01-22 5 views
0

Я работаю над Windows Form (приложение C#), и когда я запускаю это приложение из cmd.exe, сообщение (журнал ошибок, журнал отладки) выводится в окно сообщения.C# Вывод текущей командной строки?

Как это сделать, чтобы вывести это сообщение на текущий CMD.exe, который я запускал приложением C#?

Пример: я

C:>D:\Demo\CsOutputMsgToCMD\CsOutputMsgToCMD\bin\Release\CsOutputMsgToCMD.exe 1 

Вывод: Это сообщение должно быть выведено в текущем CMD

The argument is 1 

Update # 1: Моя C# приложение форм Windows приложение (не консоль) Но я хочу, чтобы пользователь запускал это приложение из cmd.exe

  • Дело № 1: не какой-либо аргумент: Это запустить приложение в обычном режиме (GUI)
  • Дело № 2: Есть аргумент

    • Если аргумент == 1, я действие # 1 без запуска GUI
    • Если аргумент == 2, я действие # 2 без графического интерфейса запуска
    • Если аргумент == п, я действие #n без GUI запуска

    => Если не запускать GUI приложение, то выход должен быть в аренда cmd.exe (который бежал приложение)

+3

Используйте шаблон приложения консоли в этом случае. – Rahul

+1

Помимо того, что в качестве приложения Windows вы не должны запускаться из окна консоли (так что никто не может существовать), вы также заметите, что консоль, с которой вы запускались, готова и может запускать новые команды - поэтому он может находиться в середине выполнения совершенно несвязанного вывода для какой-либо другой программы. –

+0

Возможно, вы сможете добиться этого с помощью прослушивателя Debug и добавить его в коллекцию Debug.Listeners. Также вам нужно определить флаги сборки DEBUG и/или TRACE. –

ответ

2

Общий «трюк», чтобы сделать вещи работать в соответствии с вашим обновления 1 должен иметь две программы. Позволяет называть их devenv.com и devenv.exe. Вариант .com является консольным приложением. Вариант .exe является приложением оконных форм.

Если вы просто запустите devenv из командной строки, консольное приложение будет работать (с командной строкой способствует .com над .exe, когда сталкивается с двумя программами с тем же именем, но разными расширениями). Затем он может проверить свои аргументы и, если он решает, что GUI вызван, он запускает devenv.exe и затем выходит. В противном случае он будет продолжаться как обычно для консольного приложения и остается прикрепленным к консоли.

Если у них будет много общих функций, я бы порекомендовал разместить большинство из них в сборке DLL, которые они могут совместно использовать.

1

Одним из подходов может быть изменение типа проекта на консольную аппликацию и использование Environment.GetCommandLineArgs() для получения аргументов.Так,

Шаг 1: Перейти к проекту свойства -> Применение и изменение Тип выхода в консольное приложение

Шаг 2: Измените основной метод что-то вроде этого:

static void Main() 
{ 
    string[] args = Environment.GetCommandLineArgs(); 
    if (args.Length <= 1) 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
    else 
    { 
     switch (args[1]) 
     { 
      case "1": Console.WriteLine("Doing #1 stuff"); break; 
      case "2": Console.WriteLine("Doing #2 stuff"); break; 
      case "n": Console.WriteLine("Doing #n stuff"); break; 
     } 
    } 
} 

Первый аргумент будет имя приложения, а остальные будут фактическими параметрами, которые вы отправляете.

Вы должны, конечно, извлечь бизнес-логику в отдельную DLL, чтобы избежать дублирования кода. Таким образом, если вы запустите консоль без каких-либо параметров, она запустит окно Form1, иначе проверит значение аргумента.

Вы также можете использовать операторы Console.WriteLine в формах, и этот вывод также войдет в командную строку, запускающую приложение.

Одно из предостережений с этим подходом - если вы дважды щелкните приложение, откроется окно консоли, а также форма окна. Если это не беспокоит вас или запускает его из командной строки, это единственный вариант, который вы дадите, тогда это может сработать для вас.

Надеюсь, это поможет.

+0

Этот подход отлично работает при запуске приложения из cmd.exe. Но когда я запускаю его двойным щелчком, он запускает как графический интерфейс, так и консоль. – GSP

+0

@ GSP: Да, именно поэтому я упомянул об этом в своем ответе. Вы можете использовать interop, чтобы скрыть это окно (не пробовал это сам, хотя) Это похоже на рабочий ответ: http://stackoverflow.com/questions/3571627/show-hide-the-console-window-of-ac -sharp-консольное приложение –

Смежные вопросы