Выполнить как консольное приложение, когда задан параметр - PullRequest
2 голосов
/ 20 сентября 2011

Несколько дней назад я разработал приложение WinForms на C # с использованием VC # 2010 Express. После создания и сохранения проекта я сделал его консольным приложением в настройках проекта, поэтому в дополнение к стартовой форме появляется окно командной строки Windows. Я использовал консоль для вывода отладочной информации (просто с помощью функции Console.Write ()).

Итак, теперь мое приложение готово к выпуску. Я не хочу, чтобы пользователь видел консоль, но я хотел бы интегрировать способ показать консоль заинтересованным лицам. Итак, лучший способ - это аргумент, я думаю (например, -console), но я не знаю, как запустить программу как консольное приложение, только когда установлен аргумент. Я точно знаю, как обращаться с массивом args [], но я не знаю, как показать консоль при наличии аргумента. Я уже попробовал это, просто запустив программу через командную строку (CMD -> prog.exe), но это не сработало. Программа запускается, но консоль напрямую показывает текущий путь после запуска программы, как обычно.

Есть ли возможность для моего намерения?

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

AFAIK, нет никакого способа, чтобы один двоичный файл поддерживал как консольное, так и не консольное поведение, при этом выбор делался при запуске. Все обходные пути, которые я видел, используют два двоичных файла.

Здесь обсуждается о том, как Python решает проблему (жирный шрифт):

Стандартный Python.exe , поставляемый с Python , известен как консольное приложение (это означает, что оно было создано для взаимодействия с консолью Windows, иначе называемой DOS-блоком). или командная строка). Хотя вы можете запускать программы Tkinter с помощью Python.exe, ваша программа всегда будет связана с консолью Windows . Работает просто отлично, но имеет следующие побочные эффекты:

  • Если вы запустите Python.exe из Windows Explorer, будет создано новое пустое окно консоли; затем создаются окна Tkinter.
  • Если вы запустите приложение Tkinter из Python.exe из командной строки, командная строка не вернется, пока приложение Tkinter не будет завершено. Это станет сюрпризом для многих пользователей, которые ожидают, что выполнение программы с графическим интерфейсом немедленно возвращает командную строку.

Чтобы обойти эту проблему, Python поставляется со специальной версией графического интерфейса под названием Pythonw.exe . Это почти идентично стандартному Python.exe, за исключением того, что это не консольная программа, поэтому не страдает от проблем, описанных ранее.

1 голос
/ 20 сентября 2011

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

private void Form1_Load(object sender, EventArgs e)
{
    string[] args = Environment.GetCommandLineArgs();
    foreach(string arg in args)
    {
       if(arg == "consoleargument")
       {
           // Run console
       }
    }
}
0 голосов
/ 20 сентября 2011

Вы можете связаться с kernel32.dll и использовать функцию AttachConsole. Вот пример: http://www.csharp411.com/console-output-from-winforms-application/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...