不同的 EXE 如何在正确的运行时运行?

Posted

技术标签:

【中文标题】不同的 EXE 如何在正确的运行时运行?【英文标题】:How do different EXEs run in the right runtime? 【发布时间】:2010-09-15 17:42:42 【问题描述】:

我一直很好奇 EXE 扩展是如何具有多功能的,因为如果您组装一个汇编程序,您将获得一个用于您的处理器的机器代码 EXE,但如果您编译一个 C# 或其他 .Net 程序,除了它在适当的运行时环境中运行之外,您还可以获得一个 EXE。我不确定这是否因操作系统而异(我想是的),但是当执行 EXE 时,它如何确定如何执行它?

在相关说明中,如果我正在编写自己的编程语言,我将如何将我的运行时环境与此机制联系起来?

【问题讨论】:

【参考方案1】:

将 .NET 程序编译为 EXE 时,它不仅仅是一个字节码(如 Java)。实际上创建了本机可执行文件,它将加载 .NET 运行时并将 .NET 字节码交给它,或者显示一条友好的错误消息,指示框架不可用。

格式比这更灵活,因为每个 Windows EXE 实际上在开头都包含一个 DOS 程序,当作为 DOS 程序执行时会显示错误(“无法在 DOS 模式下运行”)。

您可以在 Wikipedia 上阅读有关 PE 格式的更多详细信息:http://en.wikipedia.org/wiki/Portable_Executable

【讨论】:

为您的好答案添加一个细节:至少在错误消息 (Cannot run in DOS mode.) 的情况下,可执行文件中包含的 DOS 程序被称为 stub i>.

以上是关于不同的 EXE 如何在正确的运行时运行?的主要内容,如果未能解决你的问题,请参考以下文章

从 VS2008 运行和仅运行 .exe 时,GPU 代码给出不同的时间

cx_Freeze - 从桌面快捷方式运行 .exe 时出错

MinGW 产生的 exe 在不同的系统上运行时会产生“与 Windows 版本不兼容”

如何在NSIS卸载时线运行一个EXE文件?(EXE文件在卸载程序目录下)用啥代码?

如何在运行时更改 .exe 的名称

Tkinter 程序在 IDE (Visual Studio) 中运行良好,但是当使用 pyinstaller 编译为 .exe 时,线程的工作方式与在 IDE 中不同