【问题标题】:32-bit executable running as a 64-bit Windows process?作为 64 位 Windows 进程运行的 32 位可执行文件?
【发布时间】:2022-11-12 10:28:11
【问题描述】:

我有一个生成 32 位可执行文件的项目。此可执行文件包含在一个更大的包中,其中可执行文件使用 MSI 安装程序作为 Windows 服务安装。尽管可执行文件是 32 位的(我检查了文件头),但该进程作为 64 位进程运行。我试图调试这个进程,当我通过 Visual Studio 打开“附加进程”菜单时,我看到它的类型包括 x64 而不是 x86。

这是可能的还是我错过了什么?如果可能的话,我该如何为其他一些 32 位可执行文件执行此操作?

【问题讨论】:

  • 这是 .NET 可执行文件还是本机二进制文件?
  • @PMF 它是一个.NET 可执行文件。

标签: .net windows visual-studio x86 64-bit


【解决方案1】:

对于 .NET 可执行文件,这是正常的。 .NET 可执行文件可在最适合的任何环境中运行,具体取决于可用的硬件和运行时版本。可以在 32 位模式下强制执行 .NET 可执行文件,但这通常仅在需要与 32 位本机 dll 交互时才执行。

.NET Framework 程序集和 .NET Core/NET5.0+ 程序集之间的细节略有不同。但是对于后者,基本上是目标运行时指定它是以 32 位还是 64 位模式运行二进制文件。现在这很容易,因为应用程序几乎总是以“AnyCPU”模式构建,告诉运行时应用程序不关心使用什么 CPU(或什么操作系统、硬件等)

【讨论】:

  • 我有这个可执行文件的 2 个版本,都是 32 位的,但一个作为 64 位 Windows 服务运行,另一个作为 32 位服务运行。这是因为它们的构建方式吗?可能一个使用“任何 CPU”,另一个使用其他配置?
  • 这是可能的。您使用的是 .NET Framework 还是 .NET Core?
  • 我正在使用 .NET 框架
  • 对于 .NET Framework,这是内置在代码中的。在编译期间,您可以声明是否要在 32 位模式或 64 位模式下运行应用程序(或在运行时决定)。所以是的,这两个版本很可能是用不同的设置构建的。
  • 你是对的,在我更改构建设置后,我能够使第二个 32 位可执行文件作为 64 位进程运行。您是否有一些文档/视频,我可以在其中阅读更多关于这些内容的信息,特别是针对 .NET 的?
猜你喜欢
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2011-02-27
  • 2011-06-23
  • 1970-01-01
  • 2014-02-26
  • 2020-09-16
相关资源
最近更新 更多