星期五, 3月 01, 2013

一般使用者權限即可安裝執行的 ActiveX

過去在網頁上部署 ActiveX,都需要電腦使用者具有管理權限才能安裝執行,但據說在 Vista 以後,就鬆綁到一般使用者權限即可。這對於我許多「MIS 管很嚴」的客戶來說,似乎是個蠻不錯(還是剛好相反?)的消息。做為一個 .NET based ActiveX 元件提供者,測試起來的確如此,但其中的小細節還有點多:
  1. 元件一定要經過簽署,而且這與封裝簽署是兩回事。
  2. 如果有被依賴的元件一同部署,不能放到系統目錄。
  3. 封裝資訊指定部署範圍為「使用者」。
  4. [.NET based ActiveX] 不能在封裝內的批次檔呼叫 RegAsm 註冊,要把寫入的所有機碼整理成一個檔案,由批次檔的命令去匯入。
  5. [.NET based ActiveX, Optional] 要請使用者事先加入「信任的網站」,或對「網際網路」安全性區域修改以下兩項:「允許不提示就執行從未使用過的 ActiveX 控制項」為「啟用」、「僅允許認可的網域使用 ActiveX 而不提示」為「停用」。
  6. [Optional] 若能在事前讓簽署元件的憑證位於「受信任的發行者」存放區,且上層憑證皆位於「中繼憑證授權單位」或「受信任的根憑證授權單位」,只要瀏覽器視該網站屬於網際網路(不需加入信任的網站),且安全性設定保持在預設值,元件就能不經提示直接下載安裝。
如果是一個傳統 ActiveX,只要滿足前三點即可。如果是 .NET based ActiveX 又沒做到第五點的話,安裝後的第一次執行會出現一個惱人的資訊列提示,大意是說「這個網站想要執行來自 '無法使用' 的 '控制項名稱無法使用'」,真是亂搞!如果使用者教得好,他願意相信這沒問題的話,倒是無妨。當然,這些雜事(第六點除外)也可以一起併到第四點的機碼匯入,不過安裝完之後還得提醒使用者重啟瀏覽器,如果只是對網頁重新整理的話,那個惱人的資訊列提示還是會出現。

[2013/08/09 補充]
以上第五、六點要多做的事,其實源自於第四點整理的機碼不足。後來找到一個簡單的方法:
  1. 同上
  2. 同上
  3. 同上
  4. RegAsm /regfile:a.reg 將元件的註冊指令先匯出
  5. 修改 a.reg 的內容,指向 HKCR 的改成 HKCU
  6. RegAsm import a.reg
這些步驟可以自動化,而且在 Windows 7, 8, 8.1 測試都沒問題。繁瑣的內容就請容許我保留給公司內訓了。

[2014/10/22 補充]
在 Windows Server 2012 摸索的經驗:
  1. 在伺服器上的瀏覽器限制較嚴格,如果能將網站列入「受信任」區域會好很多。
  2. 預設的 Administrator 首次開啟有 ActiveX 的網頁就是不會提示下載,當然也真的沒有下載。必須另外新增使用者,事後要不要將此人加入管理者群組都可以,反正後續的提示下載安裝 ActiveX 都正常了。

沒有留言:

張貼留言