在 64 位版本的 Windows 上,您有两个单独的 Program Files 文件夹。但它并没有就此结束。您还有两个单独的系统目录,用于存储 DLL 库和可执行文件:System32 和 SysWOW64。尽管名称不同,System32 充满了 64 位文件,而 SysWOW64 充满了 32 位文件。那么给出了什么?
System32 目录包含 Windows 系统文件,程序使用的 .DLL 库文件和作为 Windows 一部分的 .EXE 程序实用程序。虽然您在此处找到的大部分文件都是 Windows 操作系统的一部分,但第三方软件程序有时也会将自己的 DLL 文件安装到此文件夹中。
在您的系统上运行的应用程序可能安装在您的 Program Files 文件夹或其他位置,但它们通常从 System32 文件夹加载系统范围的库。
在 64 位版本的 Windows 上,您有一个包含 64 位程序及其文件的 C:Program Files 文件夹,以及一个包含 32 位程序及其文件的 C:Program Files (x86) 文件夹。将这些文件分开是有帮助的,因为 64 位程序需要 64 位 DLL 文件,而 32 位程序需要 32 位 DLL 文件。
如果 32 位程序去加载它需要的 DLL 文件,找到一个 64 位版本并尝试加载它,它将崩溃。通过将 64 位和 32 位软件分成两个不同的 Program Files 文件夹,Windows 确保它们不会混淆并导致问题。
但是,并非所有 DLL 文件都存储在 Program Files 中。 Windows附带的许多系统范围的库都存储在C:System32中,一些程序也将自己的库文件转储到这里。因此,正如 Windows 有单独的 32 位和 64 位 Program Files 文件夹一样,它也有单独的 32 位和 64 位版本的 System32 文件夹。
在 32 位计算机上,所有 32 位程序都将其文件存储在 C:Program Files 中,系统范围的库位置为 C:System32。
在 64 位计算机上,64 位程序将其文件存储在 C:Program Files 中,系统范围的 C:WindowsSystem32 文件夹包含 64 位库。 32 位程序将其文件存储在 C:Program Files (x86) 中,系统范围的文件夹为 C:WindowsSysWOW64。
这绝对是违反直觉的。尽管名称中有“32”,但 System32 文件夹包含 64 位库。而且,尽管名称中有 64,但 SysWOW64 文件夹包含 32 位库——至少在 64 位版本的 Windows 上是这样。
通常,您不需要知道这一点。您使用的 Windows 操作系统和程序会自动将它们的文件放在正确的位置并使用正确的文件夹。但是,如果您需要在正确的位置手动安装 DLL 文件或查找某个文件的安装位置(这种情况很少见),您需要知道哪个是哪个。
这里名称中的“WOW64”部分是指微软的“Windows 32-bit on Windows 64-bit”软件,是操作系统的一部分。这允许 Windows 在 64 位版本的 Windows 上运行 32 位程序。 WoW64 重定向文件访问以确保程序正常运行。
例如,如果您在 64 位版本的 Windows 上安装一个 32 位程序,它会尝试写入 C:Program Files 文件夹,WoW64 会将其指向 C:Program Files (x86)。而且,如果它想访问 C:WindowsSystem32 文件夹,WoW64 会将其指向 C:WindowsSysWOW64。 Windows 使用文件系统重定向器执行此操作。
这一切都在后台自动透明地发生。该程序甚至不必知道它在 64 位操作系统上运行,这使得较旧的 32 位程序无需修改即可在 64 位版本的 Windows 上运行。 WOW64 还重定向注册表访问,确保 64 位和 32 位程序在注册表中有不同的区域。
所有这些都让我们回到了那个价值百万美元的问题:为什么“System32”文件夹是 64 位的,而 SysWOW64 是 32 位的?
答案似乎是许多 32 位应用程序被硬编码为使用 C:WindowsSystem32 目录。当开发人员为 64 位版本的 Windows 重新编译这些应用程序时,他们继续使用 C:WindowsSystem32 目录。
微软并没有重命名该目录并迫使开发人员转移到新目录,从而破坏了该过程中的许多应用程序,而是将“System32”保留为标准系统库目录。他们为在 WoW64 层下运行的应用程序创建了一个新的库目录,并将其命名为“SysWOW64”。当你这样想时,这个名字就更有意义了。
是的,名称中带有“32”的目录现在是 64 位的,这有点傻。也许微软在 90 年代将其命名为 C:WindowsSystem32 时就应该预见到这一点。但是,虽然更直接的命名方案会很好,但不值得破坏一堆程序并为开发人员做更多的工作只是为了达到目的。这意味着在可预见的未来,我们将继续使用 System32 和 SysWOW64。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/15392.html