我有一个在32位Vista系统上运行的cmd文件。
我注意到代码引用了system32驱动程序文件夹。
我想知道代码是否可能在64位Windows 7系统上运行。所以我想我的问题是 64位系统是否包含system32文件夹?
非常感谢任何回复。
答案 0 :(得分:13)
64位Windows中的System32文件夹实际上包含64位文件,在WOW64下运行的32位程序通常会在System32中查找可以调用的32位DLL等 - 但它们会找到64位的。因此,操作系统将所有32位应用程序对System32文件夹的请求重定向到包含32位系统文件的SysWOW64文件夹。
答案 1 :(得分:7)
Windows有一项名为WoW 64(Windows-on-Windows 64位)的技术,它允许32位应用程序(甚至是用C / C ++编写的编译应用程序)在64位Windows上运行。
除了System32文件夹之外,64位Windows安装还有一个SysWow64文件夹,该文件夹具有32位版本的文件,您可以在System32中找到这些文件。
要明确的是,从32位进程运行时,对System32的引用会被重定向(除非进程禁用此重定向,这是可能的)。因此,如果您有一个引用System32的.CMD文件,它实际上将从SysWow64目录中读取。
答案 2 :(得分:1)
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:Windows
on
Windows64
:
问题是这些32位应用程序应该在哪里存储所有32位文件,并配置其32位DLL的位置,并加载32位操作系统支持文件?
我们已经知道原生应用程序存储在哪里。
| 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位位置,则需要给出“真实”位置:< / p>
| 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位应用程序受到所有这些仿真和thunking的影响,那么解决方案显而易见:
停止创建32位应用程序,然后在仿真层使您通过仿真时抱怨。你的申请是行为不端的古怪;解决它。
答案 3 :(得分:0)
Windows 7 64位有一个System32文件夹。
但是,您的文件是否仍会运行是一个更复杂的问题。 可能,完全取决于它所依赖的内容;如果它以错误的方式依赖驱动程序,它将失败,因为32位驱动程序在64位系统上不起作用。