0x80040112 : 無使用此類別的授權許可
出自VFP Wiki
小 (revert) |
|||
(22個中途的修訂版本沒有顯示) | |||
第1行: | 第1行: | ||
[[category:OLE/COM/ActiveX相關問題]] | [[category:OLE/COM/ActiveX相關問題]] | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ==== | + | ====0x80040112 : 無使用此類別的授權許可==== |
- | + | Windows腳本可以調用MSWinsock控件獲得比較強大的網絡訪問能力,但那個106KB的mswinsck.ocx(V6.0.89.88)不是系統自帶的,這使得該控件的實用性大打折扣。而且,腳本要調用MSWinsock還必須克服一個困難。 | |
- | + | 以"MSWinsock"為關鍵字,使用百度搜索網頁,可以獲得至少3個VBS調用MSWinsock控件的例子:獲取本機IP、端口掃瞄和發在"黑防"的《VBS+MSWinsock打造靈巧UDP後門》。但是,當你下載並註冊mswinsck.ocx,然後嘗試那些代碼時,卻會得到一個"類別未授權使用(Class is not licensed for use)"錯誤,錯誤號0x80040112。那些代碼的作者似乎都以為MSWinsock和一般的控件一樣,只要用regsvr32註冊就能正常使用了,沒有實際測試它的可移植性。而轉貼文章的人,更不會關心內容是否可靠,一味地複製粘貼而已。結果,網上所有關於VBS調用MSWinsock的例子都是"空中樓閣",沒有一個跑的起來。國內如此,國外也一樣。所有對該控件無法使用的質疑,都被人以"需要註冊"為理由打發了。當然,也有瞭解"真相"的人,但其給出的解決方案竟然是用VB重新寫個ocx封裝MSWinsock,這實在是@#$%^&!。 | |
- | + | ||
- | + | 那麼,"真相"究竟是什麼?搜索"類別未授權使用"和錯誤號,這是個好主意,但結果不理想。我們需要逆向思考,為什麼原作者不會遇到錯誤。答案是原作者的mswinsck.ocx不是單獨註冊的,而是隨VB一起安裝的。其中的差別在於,後者會安裝VB控件的設計時許可證(design-time license)。ActiveX控件的License有兩種:設計時(design-time)和運行時(run-time)。當編譯調用了某個控件的exe/dll/ocx時,編譯器會自動加入該控件的運行時許可證,所以"重新寫個ocx封裝MSWinsock"這個辦法可行。使用腳本直接調用MSWinsock時沒有運行時許可證,這時腳本宿主會嘗試在註冊表中獲取設計時許可證,單獨註冊的MSWinsock沒有相應的設計時許可證,所以就出錯了。 | |
- | + | ||
- | + | 在VS.NET安裝盤裡有VB6控件的授權密鑰(\Extras\VB6 Controls\VB6Controls.reg),導入註冊表後就能正常使用包括MSWinsock在內的VB6控件了。 | |
- | + | ||
- | + | 下載mswinsck.ocx http://blog.blogchina.com/upload/2005-03-04/20050304104731909001.zip | |
- | + | ||
- | + | 下載VB6Controls.reg http://blog.blogchina.com/upload/2005-03-04/20050304104819709852.zip | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + |
在2006年5月27日 (六) 00:17的最新修訂版本
0x80040112 : 無使用此類別的授權許可
Windows腳本可以調用MSWinsock控件獲得比較強大的網絡訪問能力,但那個106KB的mswinsck.ocx(V6.0.89.88)不是系統自帶的,這使得該控件的實用性大打折扣。而且,腳本要調用MSWinsock還必須克服一個困難。
以"MSWinsock"為關鍵字,使用百度搜索網頁,可以獲得至少3個VBS調用MSWinsock控件的例子:獲取本機IP、端口掃瞄和發在"黑防"的《VBS+MSWinsock打造靈巧UDP後門》。但是,當你下載並註冊mswinsck.ocx,然後嘗試那些代碼時,卻會得到一個"類別未授權使用(Class is not licensed for use)"錯誤,錯誤號0x80040112。那些代碼的作者似乎都以為MSWinsock和一般的控件一樣,只要用regsvr32註冊就能正常使用了,沒有實際測試它的可移植性。而轉貼文章的人,更不會關心內容是否可靠,一味地複製粘貼而已。結果,網上所有關於VBS調用MSWinsock的例子都是"空中樓閣",沒有一個跑的起來。國內如此,國外也一樣。所有對該控件無法使用的質疑,都被人以"需要註冊"為理由打發了。當然,也有瞭解"真相"的人,但其給出的解決方案竟然是用VB重新寫個ocx封裝MSWinsock,這實在是@#$%^&!。
那麼,"真相"究竟是什麼?搜索"類別未授權使用"和錯誤號,這是個好主意,但結果不理想。我們需要逆向思考,為什麼原作者不會遇到錯誤。答案是原作者的mswinsck.ocx不是單獨註冊的,而是隨VB一起安裝的。其中的差別在於,後者會安裝VB控件的設計時許可證(design-time license)。ActiveX控件的License有兩種:設計時(design-time)和運行時(run-time)。當編譯調用了某個控件的exe/dll/ocx時,編譯器會自動加入該控件的運行時許可證,所以"重新寫個ocx封裝MSWinsock"這個辦法可行。使用腳本直接調用MSWinsock時沒有運行時許可證,這時腳本宿主會嘗試在註冊表中獲取設計時許可證,單獨註冊的MSWinsock沒有相應的設計時許可證,所以就出錯了。
在VS.NET安裝盤裡有VB6控件的授權密鑰(\Extras\VB6 Controls\VB6Controls.reg),導入註冊表後就能正常使用包括MSWinsock在內的VB6控件了。
下載mswinsck.ocx http://blog.blogchina.com/upload/2005-03-04/20050304104731909001.zip
下載VB6Controls.reg http://blog.blogchina.com/upload/2005-03-04/20050304104819709852.zip