Что происходит при запуске консольного приложения .NET? - PullRequest
2 голосов
/ 24 сентября 2010

Что именно происходит при запуске консольного приложения .NET?

В обозревателе процессов при запуске exe мне интересно, почему я не вижу процесс "cmd.exe" в качестве родительского процесса для консольного приложения. Что именно отображается тогда?

Есть ли способ заменить окно консоли "по умолчанию" другим? Я предполагаю, что это будет означать изменение "консольной подсистемы".

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

Наблюдение:

  • С Mono и Linux у меня нет проблем с этим и моим тестовым приложением!
  • Используемый шрифт оказывает влияние, я не могу найти шрифт, который подходит для всего (даже с установленным пакетом Asia)
  • Настройка (изменение шрифта, размеров, ...) в реестре на HKEY_CURRENT_USER\Console оказывает влияние и может быть определена для каждого исполняемого файла.

Ответы [ 2 ]

3 голосов
/ 24 сентября 2010

В обозревателе процессов при запуске exe мне интересно, почему я не вижу процесс "cmd.exe" в качестве родительского процесса для консольного приложения. Что именно отображается тогда?

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

Есть ли способ заменить окно консоли "по умолчанию" другим?

Только по:

  • Изменение флагов компилятора для приложения на приложение с графическим интерфейсом, а затем использование Win32 API AllocConsole для создания консоли. (Включено для полноты, здесь не применяется, если вы не можете перестроить исполняемый файл). 1
  • Создание промежуточной программы, которая не является консольным приложением (поэтому не связано с его родительской консолью), которое затем запускает вашу программу.
  • Создание промежуточной программы, которая является консольным приложением (поэтому не связано с его родительской консолью), которое затем запускает вашу программу с флагом CREATE_NEW_CONSOLE, переданным CreateProcess. 2

1 Editbin.exe может изменить флаг (editbin /subsystem:WINDOWS), но тогда приложение должно будет вызвать AllocConsole.

2 Не ясно, если свойство CreateNoWindow ProcessStartInfo выполняет ту же функцию для Process.Start в .NET. Если это произойдет, этот посредник может быть написан на .NET, но нативное решение будет значительно легче - в такой короткой программе загрузка .NET значительно замедлит работу.

2 голосов
/ 24 сентября 2010

Попробуйте установить свойство Console.OutputEncoding .

Console.OutputEncoding = Encoding.UTF8;

Это фактически вызовет собственную Win32 SetConsoleOutputCP функцию , устанавливающую кодовую страницу консоли в свойство CodePage указанной кодировки.

...