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

本文关键字:机器 运行 64位 32位 何强制 如果 程序 是否 检查 模式 我的 | 更新日期: 2023-09-27 18:11:16

我们在。net 2.0中创建了一个windows服务。我将平台目标设置为X86,安装程序设置为X86。它引用的项目设置为ANYCPU。

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

我看到在64位机器上,一些进程在它们旁边有*32来表示32位,但是我创建的一个专门针对32位(X86)的测试似乎不是这样,看看它是否真的是这样。我们正在运行的服务名称旁边没有显示*32。

对此有什么想法吗?如果它不是作为32位(X86)运行,那么我很惊讶,因为我已经强制构建了。


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

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

您可以使用IntPtr.Size (MSDN文档)。如果以32位运行将返回4,如果以64位运行将返回8。

使用corflags.exe将程序集标记为32位。如果您愿意,可以在构建后的步骤中这样做:

corflags.exe MyProgram.exe /32Bit+

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

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

可能是您将调试配置设置为目标x86,但没有对发布配置进行更改,从而将其作为AnyCPU并将其部署到生产环境中?

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