在 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 位?