﻿# 如何將32位元的DLL安裝到64位元的Windows中 (WoW64)

我之前有個專案因為有用到一個 PKI 元件，該元件是用 C++ 開發的 DLL 元件，但當改安裝到 64 位元的Windows Server 2008 上就不能用了。直到最近終於在無意間發現一個 Windows Server 2008 64 位元版的一個 "**秘密**"，可以解決這種 32bit DLL 不相容於 64bit 環境的問題。

我幾個星期前在 64bit 的 Windows Server 2008 作業系統，一如往常的安裝 DLL 元件，步驟如下：

1.  將 DLL 組件先複製到 C:\\Windows\\System32 目錄下
2.  然後進入命令提示字元執行 regsvr32 xxxxxx.dll 指令

安裝時就會出現如下圖的錯誤訊息：

![RegSvr32 無法載入模組 in Windows Server 2008 64bit](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1af64bb6f211521898e1-image_3.png "RegSvr32 無法載入模組 in Windows Server 2008 64bit")

我當時 "直覺" 的認為此 DLL 不相容於 64bit 環境，但元件廠商又不提供 64bit 的版本，讓我痛苦不已，因為畢竟 Windows Server 2008 64bit + Office + 一拖拉褲的開發工具與軟體都已經安裝完成，實在不想再重新安裝一遍。

直到最近發現在 Windows Server 2008 64bit 有一個奇特的 C:\\Windows\\SysWOW64 目錄，**只要把 32bit 元件複製到這個目錄就可以正常使用 regsvr32 安裝並使用了**！

好玩的地方在於他的目錄命名規則，在 64bit 架構下的 Windows Server 2008 這兩個目錄的用途如下：

-   C:\\Windows\\System32 目錄：放置所有 64bit 的 DLL 元件
-   C:\\Windows\\SysWOW64 目錄：放置所有 32bit 的 DLL 元件

但為什麼要用 System32 當成 64bit 的預設目錄呢？

而需要與 32bit 相容的目錄為什麼要用 SysWOW64 當目錄名稱呢？還真的有一點 WOW (驚訝) 的感覺!

其實 WOW64 是 [Windows-on-Windows 64-bit](http://en.wikipedia.org/wiki/WOW64) 的縮寫，而 WOW64 是 Windows 64bit 的一個子系統，主要的目的在於讓 64bit 的 Windows 可以執行 32bit 的應用程式。WOW64 還提供一個簡易的轉換介面(lightweight translation layer) 能讓 32bit 應用程式在完全不用修改的情況下得以在 Windows 64bit 的環境下還能正常執行，其中包括 CPU, Registry, File system, ... 等各種 32bit v.s. 64bit 之間的差異做處理。

這個技術在有支援 64bit 的 Windows 版本中都有支援，像是 Windows XP x64 Edition, Windows Vista, Windows 7, Windows Server 2003, , Windows Server 2008 等。

實際的運作架構如下：

[![WOW64 運作架構](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/467455b5ea4df1388180-image_thumb_1.png "WOW64 運作架構")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a04fae03072b10234183-image_5.png)

詳細的技術細節請參考**相關連結**。

**相關連結**

-   [WOW64 - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/WOW64)
-   [64-Bit Windows Part 11: Windows On Windows 64](http://blogs.msdn.com/craigmcmurtry/archive/2004/12/14/301155.aspx)
-   [Best Practices for WOW64](https://download.microsoft.com/download/a/f/7/af7777e5-7dcd-4800-8a0a-b18336565f5b/wow64_bestprac.docx)
-   [How to Suppress and Bypass System32 File System Redirect to SysWOW64 Folder with Sysnative](http://www.tipandtrick.net/2008/how-to-suppress-and-bypass-system32-file-system-redirect-to-syswow64-folder-with-sysnative/)
-   [如何制止和繞道system32文件系統重定向到SysWow64文件夾與sysnative](https://web.archive.org/web/20090609073012/http://www.tipandtrick.net:80/2008/how-to-suppress-and-bypass-system32-file-system-redirect-to-syswow64-folder-with-sysnative/zh_TW)
