在 C# 中确定可执行文件是 64 位还是 32 位 [重复]

Posted

技术标签:

【中文标题】在 C# 中确定可执行文件是 64 位还是 32 位 [重复]【英文标题】:Determine if an executable is 64-bit or 32-bit in C# [duplicate] 【发布时间】:2012-10-20 20:30:52 【问题描述】:

我正在寻找一种解决方案来确定给定的可执行文件是 64 位还是 32 位。

被测试的可执行文件可能是基于.NET的,也可能不是。

我见过多种不同的技术,但不确定其中一种与另一种有何不同。

我见过的技术列表:

使用 dumpbin.exe(随 Visual Studio 或 Windows SDK 提供) Win32 函数 GetBinaryType http://msdn.microsoft.com/en-us/library/windows/desktop/aa364819(v=vs.85).aspx 检查文件头(在此 Q 中演示:How can I determine for which platform an executable is compiled?)

最可靠的方法是什么?

【问题讨论】:

你为什么要一个健壮的方法 - 他们要么工作要么不工作,对吗?? 阅读superuser.com/questions/358434/…希望这对你有帮助 对于 .NET 可执行文件没有可靠的方法来执行此操作。 AnyCPU 意味着它所说的,它可以是任何一个。位数在运行时确定。 但是可以知道编译后的程序是强制运行32位还是64位架构。 【参考方案1】:

我知道有两种方法: 1. 如果需要在运行时检查:使用 IsWow64Process。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms684139(v=vs.85).aspx?ppud=4 如果它是 x86 进程 - 它将返回 true,否则 - false。 2. 如果您需要在运行时检查它,只需检查 EXE PE 格式即可。 如果 NT Header -> Optional header->Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC 这是一个 x64 exe/dll。

【讨论】:

以上是关于在 C# 中确定可执行文件是 64 位还是 32 位 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

怎样判断一个exe可执行程序(dll文件)是32位的还是64位的

如何测试 Windows DLL 文件以确定它是 32 位还是 64 位? [复制]

在两个 C# 应用程序(32 位和 64 位)之间进行 IPC 的最佳方式是啥

确定当前的 PowerShell 进程是 32 位还是 64 位?

Windows 命令判断 .dll 文件是 32 位还是 64 位?

#ifdef 用于 32 位平台