最近遇到了這個問題,在注冊com組件類別時總是失敗,提示成功,但是通過oleviewer卻看不到。
注冊腳本:
HKCR { NoRemove 'Component Categories' { NoRemove {7BAAA0EE-A752-4C5A-905C-80404BB9F06F} { val '409' = s 'vector-cpp' } } atl.test.1.1 = s 'Test Class' { CLSID = s '{6490606F-5AD6-4315-8726-34B021198622}' } atl.test.1 = s 'Test Class' { CurVer = s 'atl.test.1.1' } NoRemove CLSID { ForceRemove {6490606F-5AD6-4315-8726-34B021198622} = s 'Test Class' { ProgID = s 'atl.test.1.1' VersionIndependentProgID = s 'atl.test.1' ForceRemove Programmable InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } TypeLib = s '{E455C0B3-91DD-4F41-A79C-9A00403E39E6}' Version = s '1.0' 'Implemented Categories' { {7BAAA0EE-A752-4C5A-905C-80404BB9F06F} } } } }
浪費了大半天時間,本身注冊腳本寫得是沒問題的。
問題出在注冊表上,我的系統是win7 X64位的,但是我編譯的項目工程師基於WIN32平台的。
這樣的話,com組件在自注冊會把CLSID注冊到win7 64位注冊表下對應的32位子項CLSID中(如下):
並沒有注冊到64位對應的HKCR\CLSID下,所以自然在oleviewer下的Component Categories對應組建類別下找不到對應的CLSID。
解決方法很簡單,就是把項目編譯平台改成X64!
然后重新編譯,這樣對應CLSID就會被注冊到64位注冊表的CLSID下,自然在oleviewer下的Component Categories就可以看到了。