【问题标题】:What runs my C# application?什么运行我的 C# 应用程序?
【发布时间】:2015-07-17 01:06:50
【问题描述】:

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

【问题讨论】:

    标签: c# clr


    【解决方案1】:

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

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

    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 的区别不仅仅在于 main 方法。 Visual Studio 在创建控制台和调用 main 方法的 exe 文件中生成了附加代码。有关 exe 文件如何执行此操作的详细信息,请参阅http://en.wikipedia.org/wiki/Portable_Executable

      【讨论】:

      【解决方案3】:

      在这个链接中,调查官添加了一些提到博客文章的注释(第二个链接)。 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 启动控制台”

      【讨论】:

        猜你喜欢
        • 2014-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        相关资源
        最近更新 更多