检查我的程序是否在64位机器上以32位模式运行,如果以64位运行 - 如何强制它为32位

时间:2011-10-13 19:56:11

标签: c# windows-services .net-2.0 x86

我们在.NET 2.0中创建了一个Windows服务。我已将Platform Target设置为X86,安装程序为X86。它引用的项目设置为ANYCPU。

我们在64位服务器上运行它。它必须是32位,因为它访问的ODBC驱动程序是32位,如果从64位应用程序访问它们会大量炸弹。

我已经在64位计算机上看到过,有些进程旁边有* 32表示32位,但是我创建的测试版本似乎不是特别针对32位(X86)的如果真的是这样的话。我们正在运行的服务在服务名称旁边没有显示* 32。

对此有何想法?如果它没有被运行为32位(X86),那么我很惊讶,因为我强迫构建是那样。


更新,我们发现它以64位运行,即使服务项目被迫在X86模式下运行。会导致这种情况的原因是什么?

4 个答案:

答案 0 :(得分:6)

您可以使用IntPtr.SizeMSDN个文档)。如果以32位运行,则返回4,如果以64位运行,则返回8。

答案 1 :(得分:4)

使用corflags.exe将程序集标记为32位。如果您愿意,可以将其作为构建后步骤执行:

corflags.exe MyProgram.exe /32Bit+

我没有回答你的第二个问题(你可能想为此创建一个单独的SO问题)为什么x86项目作为64位进程运行。

答案 2 :(得分:1)

对于差异性的一个合理解释是您正在部署不同构建配置的输出。

是否可以将Debug配置设置为目标x86,但是没有对Release配置进行更改,从而将其保留为AnyCPU并将其部署到生产环境中?

答案 3 :(得分:0)

private static bool Is64BitConfiguration()
{
     return System.IntPtr.Size == 8;
}