打开 C:\\Windows,System32 和 SysWOW64 两个文件夹挨在一起,System32 里全是 64 位系统文件,SysWOW64 反而装着 32 位程序用的东西。这个反直觉的命名,让很多人第一次看到都以为是自己搞错了。

名字为什么这么绕

2001 年微软推出 64 位 Windows XP 时,已经有大量程序硬编码了 System32 这个路径。为了保证老程序能继续运行,微软保留了 System32 这个名字,把真正的 64 位系统文件放进去,然后另外建了 SysWOW64 存放 32 位版本。

WOW64 的意思是 Windows 32-bit on Windows 64-bit,也就是 64 位系统里跑 32 位程序的那层兼容技术。SysWOW64 直译过来就是「系统上的 WOW64 目录」。

两个目录的对应关系

  • C:\\Windows\\System32:64 位系统文件,64 位程序调用。
  • C:\\Windows\\SysWOW64:32 位系统文件,供 32 位程序调用。
  • 注册表同名现象:32 位程序访问 HKLM\\Software 时,会被重定向到 WOW6432Node。

还有个容易踩的点:从 32 位程序里访问 System32,系统会自动重定向到 SysWOW64;反过来,用 64 位程序访问才拿到真的 System32。这就是为什么用 32 位命令行跑 system32 路径下的程序会找不到文件。

只要有人问「SysWOW64 能不能删」,答案都是不能。它体积不小,通常有几个 G,但里面是大量 32 位软件的运行基础,包括不少驱动的 32 位组件、旧版运行库。删了之后,很多日常软件会直接打不开,系统更新也可能失败。清理空间用系统自带的磁盘清理,或者清掉 WinSxS 的旧组件,别对整个 SysWOW64 动手。

为注册 DLL 时该往哪放

这是最常出错的地方。给 32 位程序注册 dll 或 ocx,文件要放 SysWOW64,然后用 32 位的 regsvr32 注册:

C:\\Windows\\SysWOW64\\regsvr32.exe 文件.dll

在 64 位系统上直接双击 regsvr32,默认调用的是 System32 下那个 64 位版本,注册 32 位控件会报「模块加载失败」。这是很多「注册成功却还是提示缺失」问题的根源。

SysWOW64 内还有一些看起来是空文件的项,比如某些系统 dll 只有几十 KB,那可能是兼容用的存根,不要当成损坏文件去替换。访问这两个目录都需要管理员权限。记一句话就够:System32 是 64 位的家,SysWOW64 是 32 位的家,名字别被骗,功能别乱删。