接獲報案,在Windows 2008註冊OCX失敗。開啟cmd.exe執行regsvr32 boo.ocx時傳回錯誤訊息:

The module "c:\windows\system32\boo.ocx” failed to load. Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files. The specified module could not be found.
無法載入模組 c:\windows\system32\boo.ocx"。 請確定二進位檔儲存於指定的路徑,或進行偵測以檢查二進位檔或相依 .DLL 檔是否發生問題。找不到指定的模組。

雖然訊息指出問題出在找不到檔案,但確定OCX檔案是存在的,聯想到問題可能出在Windows平台為x64,但OCX是用32位元開發的關係。爬文後確認此點,在x64平台註冊32位元元件(OCX, DLL)應使用c:\windows\sysWOW64\regsvr32.exe,而非c:\windows\system32\regsvr32.exe! (發現有趣的事: system"32"下的regsvr32.exe是64位元版,sysWOW"64"下的regsvr32.exe才是32位元版。XD)

將boo.ocx複製到c:\windows\sysWOW64,並使用同目錄下的regsvr32.exe執行註冊。以為就此打完收工,但又接到第二則錯誤訊息:

"boo.ocx" was loaded but the call to DllRegisterServer failed with error code 0x80040200
模組boo.ocx已載入, 但是呼叫 DllRegisterServer 失敗, 錯誤碼為 0x80040200

原因: 同事因不熟悉UAC的眉角,在啟動cmd.exe時未Run As Administrator提升為管理者權限,導致0x80040200權限不足錯誤(印象中,權限不足代碼多為0x80004005,本例不然)。重新升為管理者權限執行cmd.exe,註冊成功!


Comments

# by blackstyles

那個system32 跟 WOW64也是搞了我好一陣子才發覺這根本在虎人阿 >0>

# by

謝謝您的分享,剛好要64位元的電腦要註冊.dll檔 幫上忙了

# by steven

我也有同樣問題 可是照著做 還是解決不了 求救

# by Jeffrey

to steven, 你必須提供更多的細節資訊(嘗試了哪些操作?看到什麼錯誤訊息),大家才幫得上忙。

# by steven

謝謝 Jeffrey 提醒 想在筆電中 安裝API(期貨下單套件) ,無法安裝並出現 射手日記中一樣的訊息 The module"YuantaOrd64.ocx" was loaded but the call to DllRegisterServer failed with error code 0x80040200 模組YuantaOrd64.ocx已載入, 但是呼叫 DllRegisterServer 失敗, 錯誤碼為 0x80040200 有去照著 射手日記 所述 重新升為管理者權限執行cmd.exe 還是不行 出現一樣的訊息 請哪位高手 大 不吝指導 感恩

# by Jeffrey

to steven, 有用過茶包一哥-Process Monitor嗎?( http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/08/18/977.aspx ) 我建議用ProcMon側錄regsvr32過程中存取了哪些Registry或檔案,有沒有出現找不到或存取被拒的情況,朝這個方向偵辦。

# by Kevin

每用一次就感謝一次 在玩舊程式的時候很實用 是說.NET Framework 2.0的應用程式 在加參考的時候 COM是不是都預設抓32位元的啊? 我第一次註冊64位元的dll,COM找不到,後來連32位元也一起註冊才找到

# by lasj

将boo.ocx复制到c:\ windows \ sysWOW64,并使用同目录下的regsvr32.exe执行注册,還是提示:请确定二进位档存储于指定的路径,或进行检测以检查二进位档或相依.DLL档是否发生问题。找不到指定的模组。

# by cc

解決問題了,感謝!

Post a comment


24 + 17 =