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

出自VFP Wiki

(修訂版本間差異)
跳轉到: 導航, 搜尋
(如何解決)
(如何解決)
第15行: 第15行:
這是一個VFP6.0的bug,請參閱:http://support.microsoft.com/default.aspx?scid=kb;en-us;192693
這是一個VFP6.0的bug,請參閱:http://support.microsoft.com/default.aspx?scid=kb;en-us;192693
-
參考: http://zzzevazzz.blogchina.com/
+
參考: http://zzzevazzz.blogchina.com/867101.html
-
當你下載並註冊mswinsck.ocx,然後嘗試那些代碼時,卻會得到一個"類別未授權使用(Class is not licensed for use)"錯誤,錯誤號0x80040112。那些代碼的作者似乎都以為MSWinsock和一般的控件一樣,只要用regsvr32註冊就能正常使用了,沒有實際測試它的可移植性。而轉貼文章的人,更不會關心內容是否可靠,一味地複製粘貼而已。結果,網上所有關於VBS調用MSWinsock的例子都是"空中樓閣",沒有一個跑的起來。國內如此,國外也一樣。所有對該控件無法使用的質疑,都被人以"需要註冊"為理由打發了。當然,也有瞭解"真相"的人,但其給出的解決方案竟然是用VB重新寫個ocx封裝MSWinsock,這實在是@#$%^&!。
+
    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不是單獨註冊的,而是隨VB一起安裝的。其中的差別在於,後者會安裝VB控件的設計時許可證(design-time license)。ActiveX控件的License有兩種:設計時(design-time)和運行時(run-time)。當編譯調用了某個控件的exe/dll/ocx時,編譯器會自動加入該控件的運行時許可證,所以"重新寫個ocx封裝MSWinsock"這個辦法可行。使用腳本直接調用MSWinsock時沒有運行時許可證,這時腳本宿主會嘗試在註冊表中獲取設計時許可證,單獨註冊的MSWinsock沒有相應的設計時許可證,所以就出錯了。
+
下載mswinsck.ocx http://blog.blogchina.com/upload/2005-03-04/20050304104731909001.zip
-
在VS.NET安裝盤裡有VB6控件的授權密鑰(\Extras\VB6 Controls\VB6Controls.reg),導入註冊表後就能正常使用包括MSWinsock在內的VB6控件了。
+
下載VB6Controls.reg http://blog.blogchina.com/upload/2005-03-04/20050304104819709852.zip
-
 
+
-
另一個解決方法:
+
-
重點在於mswinsck.ocx 這個ActiveX Control 的使用權註冊,這必須要在Windows 的registry
+
-
中,有一個license key 才可以,但mswinsck.ocx 的license key 是什麼呢?
+
-
微軟網站上,有個公用程式可以下載:
+
-
http://download.microsoft.com/download/vc60std/sample/1.1/NT45/EN-US/Licreqst.exe
+
-
然後就可以看到mswinsck.ocx(其ProgID 是「MSWinsock.Winsock」)的license key 了(應
+
-
該說可以看到其它ActiveX Control 的license key),找到後,在registry 的:
+
-
HKEY_CLASSES_ROOT\Licenses
+
-
找到該key、並點選到它,然後匯出登錄檔,把這個登錄檔給user,在他的電腦中用滑鼠
+
-
DoubleClick 將其加入登錄中,當然mswinsck.ocx 也需以regsvr32 註冊,這兩個動作完成後,
+
-
Client 就可以正常執行了。而這兩個動作都可以透過WSH 物件來做,也就是說,你的程式可
+
-
以幫user 自動做的意思。
+
-
其它ActiveX Control 的license 問題,也都可以比照此法。
+

在2005年9月26日 (一) 01:48所做的修訂版本

目錄

說明

當要使用VFP 提供的 ActiveX 元件時,出現錯誤訊息:

  • OLE錯誤程式碼0x80040112:無使用此類別的授權許可

  • 0x80040112 : Class is not licensed for use

來源

提供者

  • roror

如何解決

這是一個VFP6.0的bug,請參閱:http://support.microsoft.com/default.aspx?scid=kb;en-us;192693

參考: http://zzzevazzz.blogchina.com/867101.html

   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