我遇到了一个奇怪的情况,32位进程声称其PROCESSOR_ARCHITECTURE是AMD64,导致基于该标志做出决策的组件出现故障。
我将它分离到以下步骤:
在Main:
Console.WriteLine(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"));
Console.ReadLine();
它显示AMD64,即使它是32位进程(Console应用程序的默认设置,每个Build设置)。
问题:其他人也可以重复这一点,如果有,你能解释一下吗?
注意:如果你很好奇,我以这种方式运行VS的原因是我正在为第二个实例使用实验配置单元
更新:请注意,在我的真实场景中,我自己并没有查找此环境变量。相反,我使用一个组件(SQLCE)来查找它并依赖它是正确的。
答案 0 :(得分:2)
这不会直接回答您的问题,但为什么您不只是测试IntPtr.Size
的值?如果它是4那么你是32位,如果它是8那么你是64位。
.NET framework 4还具有Is64BitProcess和Is64BitOperatingSystem属性,这肯定是前进的方式......
答案 1 :(得分:1)
根据我的调查结果,我认为我可以为此提出合理的解释。
通过将项目设置为“任何CPU”(类库的默认值),PROCESSOR_ARCHITECTURE
环境变量将设置为运行外部进程时最有能力的,“AMD64”为64-位OS。但是,由于Visual Studio IDE实际上是一个使用WOW运行的32位进程,因此从第二个实例中启动的进程可能会造成混淆。
强制库明确定位32位平台将正确设置我找到的东西。也许你应该这样做。
答案 2 :(得分:0)
据我所知,PROCESSOR_ARHITECTURE不是硬件处理器,而是指操作系统软件的处理器。
由于AMD是第一个创建64位架构(x86-64)的公司,微软为此提供了对操作系统的支持,并留下了AMD最初给予它的头衔。 AMD64和Intel64实际上指的是相同的x86-64架构,因此它们是兼容的。
您可以尝试例如获取PROCESSOR_IDENTIFIER,并根据其中的信息确定处理器的类型。
如果我在这里错了,有人可以纠正我。