什么运行我的C#应用​​程序?

时间:2015-05-06 18:10:58

标签: c# clr

在Visual Studio中开发C#项目时,我有三个输出类型选项。控制台应用程序,Windows应用程序和类库。 AFAIK是DLL和EXE之间的唯一区别,EXE应该定义一个入口点,并在双击文件时调用它。但是,当我启动从Console Application构建的EXE时,会创建一个控制台窗口。显然,除了CLR启动然后调用我的Main方法之外,还会发生一些事情。 是什么启动了控制台窗口?当我启动从Windows应用程序构建的EXE时,是否还运行了一些其他代码,或者它只是我的主要方法?

3 个答案:

答案 0 :(得分:4)

您的可移植可执行文件(exe)将包含有关它的应用程序类型的信息。

IMAGE_OPTIONAL_HEADER

Subsystem标志定义了构建应用程序的用户界面类型。

IMAGE_SUBSYSTEM_WINDOWS_CUI定义控制台应用程序,IMAGE_SUBSYSTEM_WINDOWS_GUI定义Windows应用程序,依此类推。

了解更多信息Peering Inside the PE: A Tour of the Win32 Portable Executable File Format

答案 1 :(得分:2)

输出类型是项目的配置参数,它告诉Visual Studio编译时要执行的操作。如果设置为Console Application,它将生成一个exe文件,其中包含启动控制台窗口的代码。

dll和exe之间的差异不仅仅是主要方法。 Visual Studio在exe文件中生成了附加代码,用于创建控制台并调用main方法。有关exe文件如何执行此操作的详细信息,请参阅http://en.wikipedia.org/wiki/Portable_Executable

答案 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相同的内容,但为了帮助您进行未来的搜索,这些是谷歌用于查找上述资源的关键字。 “双击exe启动控制台”

相关问题