我们在.NET 2.0中创建了一个Windows服务。我已将Platform Target设置为X86,安装程序为X86。它引用的项目设置为ANYCPU。
我们在64位服务器上运行它。它必须是32位,因为它访问的ODBC驱动程序是32位,如果从64位应用程序访问它们会大量炸弹。
我已经在64位计算机上看到过,有些进程旁边有* 32表示32位,但是我创建的测试版本似乎不是特别针对32位(X86)的如果真的是这样的话。我们正在运行的服务在服务名称旁边没有显示* 32。
对此有何想法?如果它没有被运行为32位(X86),那么我很惊讶,因为我强迫构建是那样。
更新,我们发现它以64位运行,即使服务项目被迫在X86模式下运行。会导致这种情况的原因是什么?
答案 0 :(得分:6)
您可以使用IntPtr.Size
(MSDN个文档)。如果以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;
}