Vista64 为什么微软决定将32位应用程序放在;程序文件(x86)“;?

Vista64 为什么微软决定将32位应用程序放在;程序文件(x86)“;?,vista64,Vista64,将64位应用程序放在“程序文件(x64)”中,而将32位应用程序放在“程序文件”中运行,这是否更有意义 我有一个批处理文件,需要运行编译器。在x64中,该程序位于“程序文件(x86)”中。在WindowsVista 32位上,它位于“程序文件”中—环境变量?检查它: ProgramFiles=C:\Program Files ProgramFiles(x86)=C:\Program Files (x86) 我该怎么办 除非指定x86-64,否则通常假定tnx为32位。为什么他们需要自己的程

将64位应用程序放在“程序文件(x64)”中,而将32位应用程序放在“程序文件”中运行,这是否更有意义

我有一个批处理文件,需要运行编译器。在x64中,该程序位于“程序文件(x86)”中。在WindowsVista 32位上,它位于“程序文件”中—环境变量?检查它:

ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86) 
我该怎么办



除非指定x86-64,否则通常假定tnx为32位。为什么他们需要自己的程序文件目录呢?

因为微软喜欢让人们的事情变得更复杂。他们并没有简化到64位的转换,而是将其划分为多个部分,使其变得困难。

呃。。。我认为x86指的是英特尔处理器体系结构,例如8086、80286、80386、80486和80586

80386拥有第一个32位指令集,请参阅(维基百科)

编辑:啊,问题澄清了


请参阅StackOverflow问题。

那没什么。猜猜\Windows\System32包含什么?没错,64位DLL文件。那么他们决定把32位遗留DLL文件放在哪里呢\当然是Windows\SysWOW64

问题是,虽然Windows应用程序有内置的工具来发现系统目录的位置,但许多应用程序并不使用它们。由于微软,尤其是向后兼容性的奴隶,我们得到了像这样愚蠢的东西。

编辑:我有一个批处理文件,需要运行FLEX编译器。在X64中,该程序位于Vista 32位上的“程序文件(x86)”中,它位于“程序文件”中。。环境变量。。检查它:

使用%ProgramFiles%环境变量并跳过所有这些麻烦。

使其可移植:

SET ExecPath=%ProgramFiles(x86)%
IF "%ExecPath%"=="" SET ExecPath=%ProgramFiles%
a、 )仅仅因为默认安装位置发生更改并不意味着您必须在那里安装东西。一个简单的注册表更改将使您的新安装转到您想要的任何地方。我的所有文件都放在一个单独的驱动器中,放入我选择的文件夹中。如果一个应用程序甚至无法通过注册表跟踪其安装路径,那么它首先可能就不值得安装


b、 )我假设他们将32位应用程序放在x86文件夹中,因为它不是32位操作系统,也就是说,旧的东西放在这里。你不会买一栋新房子,让你的狗睡在里面,而你睡在他的旧狗屋里,对吧?如果64位是向前迈出的一步,那么为什么要将遗留软件放在标准安装文件夹中?

我称之为flamebait。对结束这个话题有什么反对意见吗?也许在你决定把这个话题扯下来之前,我得到了一个合理的答案-?32位与64位体系结构的问题绝对与编程有关。@Scott-我试图想办法编辑这个话题,使之更与编程有关,而不是引起激烈的争论,但无法做到。如果你或其他人能想办法改变它,我不会有任何问题重新打开它。好的。让我试试编辑,因为我真的面临一个问题,我需要答案是的。。这是一个更好的问题!!我不知道这是多么烦人,我更喜欢把它们分开(看起来更整洁)。虽然如果它们都是“程序文件”的子文件夹会更好。是的,它们非常恨你。叹气我从来没有说过他们恨我,但我希望他们能成功地避免绝对所有的64位分叉。flex编译器不在%ProgramFiles%之下。。它在%ProgramFiles(x86)%s下,但仅在vista x64上是的,但是如果您在32位上下文下运行,%ProgramFiles%指向x86文件夹只要喜欢这些Windows一致性就好了。此外,在64位任务管理器中,32位进程的后缀是“*32”,而不是“x86”@ajryan,这是他最初的问题。许多软件供应商硬编码了他们不应该做的事情,而微软在病态上反对破坏更改。这设置了一个名为“ExecPath”的环境变量,包括空间。您应该删除等号周围的空格。环境变量的值还将包含双引号,这会中断您的比较。这对任何人都有效吗?在32位2k3虚拟机上,环境变量ExecPath的值为%ProgramFiles(x86)%。不是“C:\Program Files(x86)”,而是带百分号的%ProgramFiles(x86)%s。我只是做了几处更正-运算符周围的间距和额外的引号已修复。a)如果您阅读了它,那么问题在于在不同的PC上开发,这些PC的默认位置安装了工具,这是一个不同的位置,具体取决于操作系统b)如果你正在开发一个产品,那么有意义的是不要打破旧的,而是为新的创造一个新的地方。
SET ExecPath=%ProgramFiles(x86)%
IF "%ExecPath%"=="" SET ExecPath=%ProgramFiles%