首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

OCX 嵌入網頁後下載失敗:IIS 環境下 CHttpFile QueryInfo 失敗錯誤 12150

     編輯:程式設計綜合問答

MFC OCX 使用 CHttpFile 下載檔案,ActiveX 測試容器與靜態網頁均正常,但部署到 IIS 網站後下載失敗,GetLastError() 返回 **12150** (ERROR_INTERNET_EXTENDED_ERROR),QueryInfo 無法取得檔案大小。

原因分析:IE 安全區域與權限差異

  • 本機靜態頁:屬「本機電腦」區域,權限最高,OCX 以完整信任執行,網路存取無限制。
  • IIS 網站:屬「區域網路」或「網際網路」區域,IE 對 ActiveX 施加較嚴格的安全策略(如禁止跨域、限制下載、需數位簽章)。
  • CHttpFile 底層呼叫 WinINET,受 IE 安全區域設定影響;QueryInfo 失敗通常因 **伺服器回應標頭缺失 Content-Length**、**重導向**、**壓縮編碼** 或 **權限不足導致請求被攔截**。

排查與解決步驟

  1. 簽署 OCX:申請代碼簽章憑證(Authenticode)對 OCX 簽名,並在 IE「信任的發行者」安裝憑證,提升信任等級。
  2. 網站加入「信任網站」:用戶端 IE 將 IIS 網站 URL 加入「信任的網站」,並將該區域安全等級設為「低」或自訂啟用「下載未簽署的 ActiveX 控制項」、「腳本存取 ActiveX」等。
  3. 檢查 HTTP 回應:用 Fiddler/瀏覽器開發者工具確認下載 URL 回應包含 Content-Length、無 302 重導向、Content-Encoding 非 gzip/deflate(或 OCX 支援解壓)。
  4. 替代方案:OCX 僅負責 UI,實際下載邏輯移至網頁端(AJAX/Blob/StreamSaver.js)或後端代理下載,避免 ActiveX 網路權限地雷區。

參考資源

CHttpFile QueryInfo 失敗錯誤 12150 解決案例

ActiveX 技術已淘汰,新專案建議改用現代 Web 技術(WebAssembly、File System Access API、Service Worker)實現檔案下載與本地存取。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved