检查Windows上是否安装了64位或32位服务

时间:2014-08-11 06:52:20

标签: c# service 32bit-64bit

我需要检查在Windows系统上是否为64位版本或32位版本编译的可执行程序。

1 个答案:

答案 0 :(得分:1)

我认为这个问题很难回答,因为Windows中的.NET可执行文件包含两种形式的代码:

第一部分是本机存根,它引入系统的可用运行时(对于较旧的Windows系统,当OS加载程序本身不识别CLR程序集时)。与其他Windows应用程序一样,它可以是32位或64位。您可以通过analyzing its PE header找到目标架构。

正如您所知,这很容易确定。但是,我怀疑它可能在很大程度上与您的用例(以及大多数用例)无关,因为第一部分不包含"有用的"您的计划的一部分,主要是出于遗产原因。

第二部分是IL(字节码),它将被JIT编译然后执行。这是有用的部分,但在不运行时,这在很大程度上与平台无关。它是运行时JIT生成的代码,它变为32位或64位。

现在,您可能已经意识到这一点:第一部分和第二部分可能不匹配。他们经常不会,因为最常见场景是使用AnyCPU配置(which will typically yield a 32-bit PE executable)构建并在64位系统上部署,其中IL将被JIT编译为64位指令。

最后,你必须具体决定你想知道哪一个(以及它是否值得这么麻烦)。您可能还想探索其他选项,例如利用AnyCPU程序集可以加载为32位或64位的事实,在许多情况下,您可以在不检查的情况下使用它们。