首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> .NET 實例教學

VC OCX 打包 CAB 簽名發布網頁全流程實戰紀錄

     編輯:.NET 實例教學

從 ActiveX 專案到網頁自動安裝:CAB 壓縮、數位簽名、INF 腳本、IE 安全設定完整指南

ActiveX 控件(OCX)雖屬舊技術,但在企業內部系統、銀行外掛、工控監控等場景仍廣泛使用。本文記錄將 VC++ 6.0 / VS2003 建立的 OCX 專案打包為 `.cab`、數位簽名、編寫 `.inf` 安裝腳本、發布至網頁自動下載安裝的完整流程,避開常見坑點。

流程概覽

  1. 建立 OCX 專案,本機測試通過(`regsvr32 MyCtrl.ocx` 成功)。
  2. 編寫 `.inf` 安裝腳本(指定檔案、註冊、版本、依賴)。
  3. 使用 `CABARC` 或 `MakeCab` 打包 `.cab` 壓縮檔。
  4. 申請/自建程式碼簽名憑證,對 `.cab` 簽名。
  5. 網頁頁面用 `` 標籤引用 `.cab`,IE 自動下載安裝。
  6. 客戶端 IE 安全區設定允許簽名/未簽名 ActiveX 執行。
  7. 關鍵工具

    • MakeCab.exe / CabArc.exe:Windows SDK 內建,`C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\`。
    • WinCAB:GUI 版 CAB 製作工具,需與 `MakeCab.exe` 同目錄。
    • SignTool.exe / SignCode.exe:簽名工具(SDK Bin 目錄)。
    • Makecert.exe / Cert2Spc.exe:測試憑證建立工具。

    .inf 安裝腳本範例

    [version]
    signature="$CHICAGO$"
    AdvancedINF=2.0
    
    [Add.Code]
    MyCtrl.ocx=MyCtrl.ocx
    
    [MyCtrl.ocx]
    file=thiscab
    clsid={YOUR-CLSID-GUID}
    FileVersion=1,0,0,0
    RegisterServer=yes
    DestDir=11 ; System32
    ; 若需相依 DLL,加入 [Dependency] 區段

    打包命令

    ; files.lst
    MyCtrl.ocx
    MyCtrl.inf
    
    ; 執行
    cabarc n MyCtrl.cab @files.lst
    ; 或
    makecab /f directive.ddf

    數位簽名流程(測試用自簽憑證)

    rem 1. 建立根憑證
    makecert -sk MyRootKey -ss MyRootStore -n "CN=MyTestRoot" -r MyRoot.cer
    
    rem 2. 建立程式碼簽名憑證(由根憑證簽發)
    makecert -sk MyCodeKey -is MyRootStore -n "CN=MyCodeSign" -ic MyRoot.cer -iv MyRoot.pvk -pe -sv MyCode.pvk MyCode.cer
    
    rem 3. 轉換為 SPC
    cert2spc MyCode.cer MyCode.spc
    
    rem 4. 簽名 CAB
    signcode -spc MyCode.spc -v MyCode.pvk -n "MyCtrl" -i "https://mycompany.com" -t https://timestamp.verisign.com/scripts/timstamp.dll MyCtrl.cab

    正式環境**必須購買受信任 CA(如 Sectigo、DigiCert、GlobalSign)簽發的程式碼簽名憑證**,否則客戶端會彈出「發行者未經驗證」警告,甚至被 SmartScreen 攔截。

    網頁部署標記

    <object id="MyCtrl" classid="clsid:YOUR-CLSID-GUID"
        codebase="MyCtrl.cab#version=1,0,0,0"
        width="300" height="200">
      <param name="BackColor" value="#FFFFFF" />
    </object>
    • `codebase` 指向 `.cab` URL,`#version` 讓 IE 比對本地版本決定是否更新。
    • 頁面需用 HTTPS,避免中間人竄改 CAB。

    客戶端 IE 設定(測試環境)

    • Internet 選項 → 安全性 → 自訂等級 → ActiveX 控件與外掛程式:
    • 「下載已簽名的 ActiveX 控制項」→ 啟用/提示
    • 「下載未簽名的 ActiveX 控制項」→ 啟用/提示(僅測試用)
    • 「執行 ActiveX 控制項和外掛程式」→ 啟用
    • 「指令碼 ActiveX 控制項標記為安全」→ 啟用

    常見失敗原因排查

    現象可能原因對策
    CAB 下載後不安裝.inf 簽名區塊缺失、CLSID 不符、版本號未遞增檢查 .inf、遞增 version、重新簽名
    安裝後網頁顯示紅叉OCX 註冊失敗(相依 DLL 缺失、權限不足、架構不匹配 x86/x64)Dependency Walker 分析、管理員身份註冊、目標平台一致
    IE 彈出安全警告憑證不受信、過期、時間戳缺失購買正規 EV Code Signing 憑證、加時間戳
    Windows 10/11 完全無法載入IE 模式/Edge IE Mode 未啟用、ActiveX 被組策略封鎖群組原則啟用 IE Mode、加入相容清單

    現代化替代建議

    新專案**強烈建議避免 ActiveX**,改用:

    • **WebAssembly (Blazor WASM)**:瀏覽器沙箱內執行 .NET 程式碼,跨平台、無安裝。
    • **Native Messaging + Chrome/Edge Extension**:本地原生程式與擴充功能通訊,權限可控。
    • **Electron / Tauri / WebView2**:打包桌面應用,內嵌 Web 技術。
    • **ClickOnce / MSIX**:.NET 桌面應用自動更新部署。
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved