接獲「ASP不死鳥親衛隊」報案,搬移x64 Server過程遇到「在測試台Windows 2012 R2註冊aspsmartupload.dll成功,但在正式台註冊失敗」的狀況!錯誤訊息為

The module "D:\some_folder\aspsmartupload.dll" 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.

同一套程式檔案,測試台註冊成功、正式台註冊失敗,推測正式台缺少了aspsmartupload.dll所需的某個系統DLL,至於少了哪個DLL?茶包一哥Process Monitor展現威力的時候到了。

再跑一次regsvr32重現錯誤(記得要用SysWOW64的版本),Process Monitor輕輕鬆鬆指出關鍵所在:

漏Copy aspsmartupload.dll 到正式台是哪招啦?(冰斗)

感嘆殺雞錯用牛刀,準備以「低級錯誤」結案之際,同事坦承擺了烏龍,但另有隱情:正式台有兩台,先前是在另一台註冊失敗,該台機器確實已複製aspsmartupload.dll,也出現相同訊息,只要後來偵察時錯用未複製檔案的另一台正式機,故絕不是漏放aspsmartupload.dll這麼單純。複製好aspsmartupload.dll,再測試一次regsvr32註冊,果不其然,出現相同的錯誤訊息。

這是一個「撕開烏龍茶包,赫然發現裡面還包了一個小茶包」的概念。

再次開啟Process Monitor側錄檔案存取,一哥不愧為一哥,很快又抓出問題關鍵-缺了MSVBVM50.dll。

研判專案用的aspsmartupload.dll是VB5寫的(好老哇~腦中出現白髮老翁步履蹣跚吃力搬著檔案的畫面),執行時需要MSVBVM50.dll Runtime。測試台之所以註冊成功,是因為同一目錄有放MSVBVM50.dll,而部署到正式台時誤以為用不到就未複製。補上MSVBVM50.dll,aspsmartupload.dll註冊成功!

戰術檢討:開始處理時不該假設正式台檔案部署與測試台一致(射手守則第8條:Trust No One,Seeing Is Believing),基於兩台機器OS版本相同,一台成功、一台失敗的前題,優先比對二者檔案差異,應能更快找出問題,列為下次改進事項。


Comments

Be the first to post a comment

Post a comment