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

ASP.NET 網頁選取本地資料夾 ActiveX 控件:C# 開發、COM 註冊、前端整合完整指南

     編輯:ASP.NET 基礎

適用場景與現狀

**僅限 Internet Explorer / Edge IE 模式**。現代瀏覽器 (Chrome、Firefox、Edge Chromium) **完全不支援 ActiveX**,因安全沙箱禁止網頁存取本地檔案系統。適用於:企業內網舊系統、IE 強制環境、特定產業軟體 (銀行、稅務、ERP)。新專案請改用 `` (資料夾上傳) 或瀏覽器擴充功能/桌面應用協助。

架構概覽

[C# Class Library] → [COM Visible + GUID] → [RegAsm /regserver 註冊] → [.dll + .tlb]
                                      ↓
[HTML 頁面] →  → [JS 呼叫 GetDirPath()]


C# 控制項核心代碼


using System;
using System.Runtime.InteropServices;
using System.Windows.Forms; // 需參考 System.Windows.Forms

namespace WebDirSelector
{
    [ComVisible(true)]
    [Guid("YOUR_GENERATED_GUID_HERE")] // 必須固定 GUID,Tools → Create GUID
    [InterfaceType(ComInterfaceType.InterfaceIsDual)] // 支援早期/晚期繫結
    public interface IDirSelector
    {
        string GetDirPath(); // 唯一對外方法
    }

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    [Guid("ANOTHER_FIXED_GUID")]
    [ProgId("WebDirSelector.DirSelector")] // 供 JS new ActiveXObject 使用
    public class DirSelector : IDirSelector
    {
        public string GetDirPath()
        {
            using (var dlg = new FolderBrowserDialog
            {
                Description = "請選擇資料夾",
                ShowNewFolderButton = true,
                RootFolder = Environment.SpecialFolder.MyComputer
            })
            {
                if (dlg.ShowDialog() == DialogResult.OK)
                    return dlg.SelectedPath;
            }
            return string.Empty;
        }
    }
}

專案設定關鍵步驟

  1. **專案屬性 → Build** → 勾選 **Register for COM interop** (開發機自動註冊)。
  2. **AssemblyInfo.cs** → `[assembly: ComVisible(true)]` (或僅標記類別)。
  3. **強式名稱簽章** (簽署) → 產生 `.snk`,便於部署至 GAC 或受信任位置。
  4. **目標平台**:若客戶端為 64 位 IE,專案必須 **x64** 或 **Any CPU (Prefer 32-bit = false)**,否則 `FolderBrowserDialog` 可能不顯示或崩潰。

部署與註冊 (客戶端機器)



regasm.exe /codebase /tlb WebDirSelector.dll



**權限提示**:IE 預設阻擋未簽名 ActiveX。需: