2013-06-13 2 views
1

У меня есть приложение winforms. Я хотел бы запустить .exe из командной строки и перенаправить вывод из одного из выходных текстовых полей в командную строку. Я не хочу запускать приложение winform, просто запустив логику в фоновом режиме.winforms output to commandline

Я попробовал советы из этой темы

C# application both GUI and commandline

, но я не видел ни одного из моих Console.WriteLine сообщений в командной строке в cmd.exe, когда я запустил приложение через ЦМД. Exe. Может ли кто-нибудь объяснить мне, что я могу сделать неправильно?

у меня есть, если заявление, что сделал эту логику:

if(args.Length >0) 
    { 
    Console.writeline("this has arguments"); 
    new Mainform(); 
    } 
    else 
    { 
    Application.EnableVisualStyles(); 
    Application.Run(new MainForm()); 
    } 

части иначе по-прежнему работает. Но ничего не происходит в if-части, либо используя cmd.exe для запуска приложения, либо когда я использую аргументы свойств -> debug-> командной строки и даю ему аргументы для запуска во время его отладки. Я понятия не имею, что я делаю неправильно.

+1

Переместить логику в отдельную dll и использовать эту dll как из форм, так и из консольного приложения –

+0

, чтобы сделать два разных приложения? Один для Winforms и один для консоли? – user2482989

+0

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

ответ

0

Я думаю, вы создали свой Windows Forms project и вставили код? Если это так, это не сработает. Вы должны создать свой Console project, и вот код, который я тестировал, работает как шарм, за исключением того, что, когда отображается форма (режим графического интерфейса), консоль все еще существует, закрывая эту консоль, также закроет вашу форму:

class Program 
{ 
    static void Main(string[] args) 
    {    
      if (args.Length == 0) 
      { 
       Application.EnableVisualStyles(); 
       Application.SetCompatibleTextRenderingDefault(false); 
       Application.Run(new Form1()); 
      } 
      else //Process command lines 
      { 
       Console.WriteLine("Please enter some command."); 
       string cmd = Console.ReadLine(); 
       Console.WriteLine("You entered: " + cmd); 
      }    
    } 
} 

Поскольку Console project не добавляет ссылку на System.Windows.Forms.dll автоматически, вы должны сделать это вручную, чтобы иметь возможность создавать свою форму в этом проекте консоли. Дело в том, что вы применили код в Winforms project, пока он должен быть в Console project. Есть только способ, который я знаю, который может показать окно консоли в приложении winforms, работает cmd.exe, но это покажет новое окно Консоли, чем существующее, которое вы используете для запуска вашего приложения.

+0

Спасибо. да, я понял это в конце концов сам. Я теперь прикрепляюсь к процессу, и он работает. Я пытаюсь найти нехитрый способ получить подсказку, не нажав enter. Я использовал System.Windows.Forms.SendKeys.SendWait ("{ENTER}"); но мой босс недоволен этим решением и видит его в качестве взлома. – user2482989