【发布时间】:2009-12-06 10:50:00
【问题描述】:
我有一个在 32 位 Vista 系统上运行的 cmd 文件。
我注意到代码引用了 system32 驱动程序文件夹。
我想知道代码是否可以在 64 位 Windows 7 系统上运行。所以我想我的问题是 64位系统是否包含system32文件夹?
非常感谢任何回复。
【问题讨论】:
-
这不属于超级用户吗?
我有一个在 32 位 Vista 系统上运行的 cmd 文件。
我注意到代码引用了 system32 驱动程序文件夹。
我想知道代码是否可以在 64 位 Windows 7 系统上运行。所以我想我的问题是 64位系统是否包含system32文件夹?
非常感谢任何回复。
【问题讨论】:
64 位 Windows 中的 System32 文件夹实际上包含 64 位文件,在 WOW64 下运行的 32 位程序通常会在 System32 中查找它们可以调用的 32 位 DLL 等 - 但它们会找到 64 位的。因此操作系统会将所有 32 位应用程序对 System32 文件夹的请求重定向到包含 32 位系统文件的 SysWOW64 文件夹。
【讨论】:
system 32文件夹包含所有64-bit DLLS,SysWOW64 文件夹包含所有32-bit DLLS?怎么回事?为什么32-bit DLLS 不是System32,64-bit DLLS 不是System64?
Windows 有一项称为 WoW 64(Windows-on-Windows 64 位)的技术,它允许 32 位应用程序(甚至是用 C/C++ 等编写的已编译应用程序)在 64 位 Windows 上运行。
除了 System32 文件夹之外,64 位 Windows 安装还有一个 SysWow64 文件夹,其中包含您在 System32 中找到的文件的 32 位版本。
需要明确的是,当从 32 位进程运行时,对 System32 的引用会被重定向(除非进程禁用此重定向,这是可能的)。因此,如果您有一个引用 System32 的 .CMD 文件,它实际上会从 SysWow64 目录中读取。
【讨论】:
System32 是包含重要操作系统文件的文件夹的名称。
64 位 Windows XP 的早期版本只能运行 64 位应用程序。这是有道理的:
64 位 Windows XP 的早期版本是 64 位的,并且仅支持运行 64 位应用程序。
而且由于所有文件夹名称保持不变,您可以简单地将应用程序重新编译为 64 位(而不必更改 任何其他内容 - 包括您意外硬编码的路径),并且就可以了。
很快就很明显,仅能够在 64 位 Windows 上运行 64 位应用程序会阻止某些人升级到 64 位 Windows。所以an emulation layer was created to allow you to run 32-bit applications on a 64-bit operating system.
它被称为WOW64:WindowsonWindows64:
问题是这些 32 位应用程序应该在哪里存储它们所有的 32 位文件,并配置它们的 32 位 DLL 的位置,并加载 32 位操作系统支持文件?
我们已经知道 native 应用程序在哪里存储它们的东西。
| Native Application |
|---------------------|
| C:\Windows\System32 |
| C:\Program Files |
| HKCU\Software |
这都是正确和正确的;如果您只是将 32 位应用程序重新编译为 64 位:一切正常。所有这些位置仍然正确。
但是现在,由于我们要向后弯曲以适应非 64 位应用程序,我们必须为它们找到一个存放旧 32 位操作系统文件的地方,并存储它们的 32 位数据,并拥有他们的 32 位程序,以及 32 位共享组件:
| Native Application | Emulated 32-bit |
|---------------------|---------------------------|
| C:\Windows\System32 | C:\Windows\SysWOW64 |
| C:\Program Files | C:\Program Files (x86) |
| HKCU\Software | HKCU\Software\Wow6432Node |
一个问题是:
C:\Windows\System32,最好获取 64 位文件C:\Windows\System32,那该死的更好获取 32 位文件这意味着,如果 32 位进程询问其中一些文件位置,Windows 必须透明地将调用重定向到 32 位文件夹和注册表项。
如果一个 32 位程序,认为它在旧的 32 位操作系统上运行,请求 32 位位置,则需要为其提供“真实”位置:
| Native Application | Emulated 32-bit asks for | Is actually given |
|---------------------|---------------------------|---------------------------|
| C:\Windows\System32 | C:\Windows\System32 | C:\Windows\SysWOW64 |
| C:\Program Files | C:\Program Files | C:\Program Files (x86) |
| HKCU\Software | HKCU\Software | HKCU\Software\Wow6432Node |
如果您不希望您的 32 位应用程序受到所有这些模拟和转换的影响,那么解决方案很明显:
停止创建 32 位应用程序,然后在仿真层导致您通过仿真时抱怨。您的应用程序是行为不端的怪人;修复它。
【讨论】:
Windows 7 64 位有一个 System32 文件夹。
但是,您的文件是否仍能运行是一个更复杂的问题。它可能,并且完全取决于它所依赖的;如果它以错误的方式依赖驱动程序,它将失败,因为 32 位驱动程序无法在 64 位系统上运行。
【讨论】: