2015-05-06 7 views
3

При разработке проекта C# в Visual Studio у меня есть три варианта типа вывода. Консольное приложение, приложение Windows и библиотека классов. AFAIK, единственное различие между DLL и EXE, заключается в том, что EXE должен иметь определенную точку входа и вызываться, когда файл дважды щелкнут. Однако при запуске EXE, созданного из консольного приложения, создается консольное окно. Таким образом, очевидно, что что-то происходит, кроме запуска CLR, а затем вызывает мой метод Main. Что запускает консольное окно? Когда я запускаю EXE, созданный из приложения Windows, есть и другой код, или это просто мой основной метод?Что запускает мое приложение C#?

ответ

4

Ваш переносимый исполняемый файл (exe) будет содержать информацию о том, какое приложение оно есть.

Subsystem флаг IMAGE_OPTIONAL_HEADER определяет, с каким интерфейсом пользователя создается приложение.

IMAGE_SUBSYSTEM_WINDOWS_CUI определяет консольное приложение, IMAGE_SUBSYSTEM_WINDOWS_GUI определяет приложение Windows и так далее.

Для получения дополнительной информации Peering Inside the PE: A Tour of the Win32 Portable Executable File Format

2

Тип выходного сигнала является параметром конфигурации для вашего проекта, который говорит Visual Studio, что делать при компиляции. Если установлено Консольное приложение, оно будет генерировать exe-файл с кодом для запуска окна консоли.

Разница между dll и exe больше, чем основной метод. Visual Studio сгенерировала дополнительные коды в exe-файле, который создает консоль и вызывает основной метод. Подробнее о том, как это работает exe-файл, см. http://en.wikipedia.org/wiki/Portable_Executable.

+0

Есть ли способ посмотреть этот код? –

+0

Вы можете использовать декомпилятор, как описано здесь: http://stackoverflow.com/questions/179741/how-do-i-decompile-a-net-exe-into-readable-c-sharp-source-code. Вы также можете использовать 7-zip для чтения текстовых файлов. – Kentative

2

В этой связи инквизитор добавил несколько заметок, в которых упоминалось сообщение в блоге (2-я ссылка). Is it possible to build a Console app that does not display a console Window when double-clicked?

http://blogs.msdn.com/b/oldnewthing/archive/2009/01/01/9259142.aspx

То же содержание, как ответ Siram в https://stackoverflow.com/a/30084790/2005526, но, чтобы помочь вам с будущим ищет это были ключевые слова, используемые в Google, чтобы найти указанные ресурсы. «двойной клик exe запускает консоль»

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