0x80040112 : 無使用此類別的授權許可

出自VFP Wiki

(修訂版本間差異)
跳轉到: 導航, 搜尋
(revert)
 
(12個中途的修訂版本沒有顯示)
第1行: 第1行:
[[category:OLE/COM/ActiveX相關問題]]
[[category:OLE/COM/ActiveX相關問題]]
-
====說明====
 
-
當要使用VFP 提供的 ActiveX 元件時,出現錯誤訊息:
 
-
*OLE錯誤程式碼0x80040112:無使用此類別的授權許可
 
-
 
-
*0x80040112 : Class is not licensed for use
 
-
====來源====
+
====0x80040112 : 無使用此類別的授權許可====
-
*http://fox.hanyu.com.tw/View.aspx?fbId=1&Id=14926
+
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,這實在是@#$%^&!。
-
*roror
+
-
====如何解決====
+
那麼,"真相"究竟是什麼?搜索"類別未授權使用"和錯誤號,這是個好主意,但結果不理想。我們需要逆向思考,為什麼原作者不會遇到錯誤。答案是原作者的mswinsck.ocx不是單獨註冊的,而是隨VB一起安裝的。其中的差別在於,後者會安裝VB控件的設計時許可證(design-time license)。ActiveX控件的License有兩種:設計時(design-time)和運行時(run-time)。當編譯調用了某個控件的exe/dll/ocx時,編譯器會自動加入該控件的運行時許可證,所以"重新寫個ocx封裝MSWinsock"這個辦法可行。使用腳本直接調用MSWinsock時沒有運行時許可證,這時腳本宿主會嘗試在註冊表中獲取設計時許可證,單獨註冊的MSWinsock沒有相應的設計時許可證,所以就出錯了。
-
這是一個VFP6.0的bug,請參閱:http://support.microsoft.com/default.aspx?scid=kb;en-us;192693
+
 
-
[http://www.hg-fix.com/ 数据恢复]
+
在VS.NET安裝盤裡有VB6控件的授權密鑰(\Extras\VB6 Controls\VB6Controls.reg),導入註冊表後就能正常使用包括MSWinsock在內的VB6控件了。
-
[http://www.hg-fix.com/ 硬盘数据恢复]
+
 
-
[http://www.hg-fix.com/ 磁带数据恢复]
+
下載mswinsck.ocx http://blog.blogchina.com/upload/2005-03-04/20050304104731909001.zip
-
[http://www.hg-fix.com/ raid数据恢复]
+
 
-
[http://www.hg-fix.com/ 磁盘阵列数据恢复]
+
下載VB6Controls.reg http://blog.blogchina.com/upload/2005-03-04/20050304104819709852.zip
-
[http://www.hg-fix.com/diskrecover.htm 数据恢复]
+
-
[http://www.hg-fix.com/taperecover.htm 数据恢复]
+
-
[http://www.hg-fix.com/raidrecover.htm 数据恢复]
+
-
[http://www.hg-fix.com/ 数据修复]
+
-
[http://www.hg-fix.com/ 硬盘数据修复]
+
-
[http://www.hg-fix.com/ 磁带数据修复]
+
-
[http://www.hg-fix.com/ raid数据修复]
+
-
[http://www.hg-fix.com/diskrecover.htm 数据修复]
+
-
[http://www.hg-fix.com/raidrecover.htm 数据修复]
+
-
[http://www.hg-fix.com/taperecover.htm 数据修复]
+
-
[http://www.hg-fix.com/ 磁盘阵列数据修复]
+

在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