如何將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

我當時 "直覺" 的認為此 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 (驚訝) 的感覺!

其實 WOW64Windows-on-Windows 64-bit 的縮寫,而 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 運作架構

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

相關連結

  

此文章由 will 發表於 2009/5/13 下午 01:14:09

永久連結 | 評論 (6) | 此文章的RSSRSS comment feed |

分類: 系統管理

標籤: , , ,

評論

五月 13. 2009 13:55

拆組達人

原來如此啊!
這樣我很多東西就可以相容了!
太棒了!

拆組達人 台灣

七月 13. 2009 18:16

Ring

不好意思
想要請問一下
我如果想在64bit上安裝某些32bit的程式
那我該複製哪些原本32bit的元件到wow64裡頭呢?
複製後是不是就可以如原本在32位元作業系統下安裝呢?
如果方便的話   希望能夠教教我
謝謝~

Ring 台灣

七月 13. 2009 19:40

will

Ring: 不好意思,你這問題是個「大哉問」,實在很難回答。

will 台灣

七月 14. 2009 17:35

Ring

看來大概是我的背景知識不足這樣^^;
造成了困擾真是不好意思...U . U

Ring 台灣

九月 1. 2009 13:52

dan0605

如果要運行在IIS7上的DLL,記得在應用程式集區中,要把准許32位元應用程式屬性,設為TRUE

dan0605

十一月 3. 2009 13:41

Jerome

感謝你的分享~問題解決了,可以早點下班,謝謝!

Jerome 台灣

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading