认识System,System32,Syswow64

本文探讨了64位Windows操作系统如何隔离32位与64位DLL文件,确保应用稳定运行。通过WOW64机制,系统能兼容32位应用,同时维护两套独立的注册表和文件路径,保证了系统的安全性与效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候人们怀疑一个系统的底层结构能否保证这个系统在被使用时达到安全而高效,64位版本的Windows在这方面就比较完美。Windows XP和Windows Server 2003都是运行64位硬件的64位版本操作系统。64位Windows操作系统运行64位代码,同时通过使用WoW64(Windows on Windows 64)也能运行32位代码。 
  你看,这并不是什么大问题,毕竟,32位版本的不同Windows操作系统都用来同时运行32位和16位代码。(技术上说,并不是同时运行,相关解释在以后的技巧中会展示给大家)

  32位版本的Windows在如何允许32为和16位代码并肩运行方面有着很复杂的机制。然而,这个系统被设计成无论你是系统管理员还是临时用户,你都不需要知道这些机制如何运行。

  但是64位版本的Windows就不同了。从一个用户的立场上看,64位应用程序和32位应用程序简单地同时运行,没有什么特殊的。但是对于一个管理员(和帮助桌面用户的人员)来说,这其中就有很大不同了:32位代码与64位代码相隔离。这个隔离是如此重要以至于64位版本的Windows有两个注册表,一个是针对64位,一个是针对32位。

  尽管64位版本的Windows XP和Windows Server 2003看起来在操作时候和它们32位的版本几乎同样的,但是在表象之下其实是有很大不同的。如果你在64位版本的Windows下按照32位版本一样来执行某些程序,你可能引起一些麻烦。

  DLL 存放到何处?

  64位应用程序的第一条规则是:你绝对不能把32位和64位代码混和在同一个应用程序内。如果你有一个64位应用程序,所有与这个应用程序相关的东西,包括DLL文件,必须是64位的。这就有一个有趣的挑战,因为有时候很多应用程序都依靠一个共同的DLL文件。幸运的是,Windows保持32位的DLL文件和64位的DLL文件处于隔离状态。

  如果你查看一下在32位操作系统内的/Windows文件夹,你会发现两个子目录:一个名为SYSTEM,还有一个名为SYSTEM32。SYSTEM目录是Windows 3.x遗留下来的,用来保持Windows的对一些旧的应用程序的向下兼容性。一般说来,16位的DLL文件(以及其它的支持文件)被存放在/Windows/System文件夹里,32位DLL文件和不同支持文件被存放在/Windows/System32文件夹里。

  32位版本的Windows保持16位和32位DLL文件的方式是非常简单的,但是64位版本的Windows保持64位和32位DLL文件的方式就不这么简单了。

    理论上说,微软将要创建一个名为/Windows/System64的文件夹来用其存放64位DLL文件,但是取而代之的是,微软创建了一个新的名为SysWOW64的文件夹来存放32位的DLL文件。第一眼看起来,让人感觉这个文件夹应该存放64位应用程序的,但是注意,32位应用程序本来应该存放它们的DLL文件到/Windows/System32文件夹里面。

  /Windows/System32文件夹在64位版本的Windows内仍然存在。但是微软使用这个文件夹做为64位DLL的仓库,而不是32位DLL文件的。我不清楚微软使用/Windows/System32文件夹来存放64位DLL的原因,但是我听说这么做是为了向下兼容性。

  那么是不是所有32位应用程序该存放它们的DLL文件到/Windows/System32文件夹呢?这又让事情变得混乱。

  如我之前所提及的,32位代码不能默认在64位版本的Windows内运行。为了运行32位的应用程序,Windows使用WOW64 emulator,来让这些应用程序还认为它们在32位版本的Windows内运行。

  当你安装一个32位的应用程序,安装向导通过WOW64 emulato运行。32位和64位代码并不混和。一旦一个应用程序(包括一个安装向导)从WOW64 emulator开始运行,它必须接着在WOW64内继续运行。这意味着当你安装一个应用程序,安装向导并不知道这个程序被安装到64位版本的Windows内,并且和它运行在32位操作系统一样把DLL文件写到/Windows/System32文件夹里面。

  当然,WOW64知道安装向导通过emulator来运行的32位应用程序。同时也知道64和32位代码不能混合在一起。所以,WOW64 emulator 给/Windows/SysWOW64创建一个别名。这意味着任何时候32位应用程序要写入到/Windows/System32文件夹或者从/Windows/SysWOW64文件夹读取,WOW64 emulator都能使其改道到/Windows/SysWOW64文件夹。

  所有这些都意味着如果你需要手动操作/Windows/System32文件夹内的内容,你可能要非常的麻烦。我最近了解到一个管理员需要安装一些小的支持脚本到一个已经安装的应用程序,这个脚本的指导上说明这些脚本需要被存放到/Windows/System32文件夹。当然这些脚本的说明假定这个应用程序是在32位操作系统上运行的。

  这些脚本没有引起系统崩溃。然而Windows给人幻想永远不用进行更新。当管理员运行应用程序,它将被改道到/Windows/SysWOW64文件夹。管理员知道他自己把这些脚本放到/Windows/System32文件夹并且能通过Windows浏览器看到这些脚本,但是不能指出为什么应用程序不能看到这些脚本。考虑到这个问题是和权限相关的,他花费了一些时间来研究这个,所以知道了关于64位版本的Windows保存DLL文件隔离的方法,所以他能够把这些脚本放到/Windows/SysWOW64文件夹。

  64位版本的Windows对于一个管理员来说,了解底层系统结构非常重要

转载于:https://www.cnblogs.com/langren1992/p/5172069.html

<think>好的,我现在需要帮用户解决如何访问或启动System64文件夹或程序的问题。首先,我得仔细理解用户的问题。用户提到“System64”,但根据我之前了解的Windows系统结构,其实并没有System64这个文件夹。常见的系统文件夹是System32SysWOW64,还有SysNative的特殊情况。 用户可能误以为存在System64文件夹,或者在某些地方看到了这个名称。我需要先确认这一点。根据提供的引用资料,比如引用[1]提到32位程序访问System32会被重定向到SysWOW64,而引用[4]指出32位应用要访问真实的System32需要使用Sysnative。这说明在64位系统中,System32存放的是64位系统文件,而SysWOW64存放的是32位的。所以System64可能是一个误解,正确的应该是System32。 接下来,我需要解释为什么没有System64文件夹。Windows为了兼容性,保留了System32作为64位系统文件的目录,而SysWOW64用于存放32位的文件。这样设计的目的是为了让32位程序在64位系统上运行时,能自动找到对应的32位库,而无需修改路径。因此,System64并不存在,用户可能想访问的是System32SysWOW64。 然后,用户可能想知道如何正确访问这些系统文件夹。根据引用[4],32位程序需要访问真实的System32时,应使用Sysnative路径。例如,在32位应用程序中使用C:\Windows\Sysnative来绕过重定向,直接访问64位的System32。而SysWOW64则是32位系统文件的存放位置。 另外,用户可能想了解如何手动访问这些文件夹。在文件资源管理器中直接输入路径,比如C:\Windows\System32,但需要注意权限问题,可能需要管理员权限才能查看或修改其中的内容。同时,用户可能被UAC提示阻止,需要以管理员身份运行资源管理器。 最后,需要提醒用户操作这些系统文件夹的风险,随意修改可能导致系统不稳定或崩溃。因此,建议仅在必要时谨慎操作,并备份重要数据。 总结来说,用户的问题源于对系统文件夹名称的误解,正确的路径是System3264位文件)和SysWOW6432位文件),而Sysnative用于32位程序访问真实System32。需要一步步引导用户理解这些概念,并正确操作。</think>在64位Windows操作系统中,**不存在名为"System64"的标准系统文件夹**。根据您提供的引用资料,系统文件存储遵循以下规则: 1. **System32文件夹**:存放64位系统文件(即使名称含"32",但实际是64位核心组件)[^3] 2. **SysWOW64文件夹**:存放32位系统文件(名称含"64"但实际是32位兼容组件)[^1][^2] 3. **SysNative虚拟路径**:仅在32位程序中可用,用于直接访问64位的System32目录[^4] ### 正确访问方式 #### 对于普通用户: 1. 直接在文件资源管理器地址栏输入: - 64位程序访问64位系统文件:`C:\Windows\System32` - 32位程序访问真实64位目录:`C:\Windows\SysNative`(仅在32位程序中有效) - 访问32位兼容文件:`C:\Windows\SysWOW64` #### 对于开发者: ```python # 示例:Python检测系统架构 import platform if platform.machine().endswith('64'): system_path = r'C:\Windows\System32' else: system_path = r'C:\Windows\SysNative' # 仅在32位程序有效 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值