Active控制項開發及部署遇到的問題

2021-07-04 12:51:54 字數 1255 閱讀 3099

最近幫同事寫乙個安裝程式用於部署activex控制項,之前沒寫過,遇到了一些問題,特記錄下來,與大家分享,若有不對,請不吝賜教!

安裝程式會安裝乙個windows服務,也是乙個com server,而activex控制項會建立com物件。安裝完畢後,activex控制項建立com物件失敗,錯誤**e_accessdenied。經調查,以http方式訪問web時iexplore程序的完整性級別處於low mandatory level,即所謂的保護模式,在訪問資源時受到較大的限制,例如此處的建立com物件失敗。note:在開發activex控制項過程中,我們可能直接開啟乙個載入activex控制項的本地的html檔案,這是iexplore處於medium mandatory level,不會出現以上的錯誤。

為了能訪問高完整性級別的物件,需要啟動另外乙個程序(broker)。這個程序處於medium integrity level,如果沒有任何配置的的話,ie會提示是否允許啟動此程序,如果在登錄檔中配置了此程序,ie會靜默啟動此程序,詳細請看understanding and working in protected mode internet explorer。於是我們在activex控制項中建立了乙個命名物件,broker程序連線此命名物件,而後broker建立com物件,這樣activex就可以利用broker程序與com 服務通訊了。

我對比了下ie8與ie10對是否靜默啟動程序列表的載入方式,ie8啟動後,不會載入此列表,當需要啟動程序時,會載入此列表,之後不會再載入(重啟之前)。而ie11啟動後會載入此列表,之後不會再載入(重啟之前)。這造成了乙個有趣的現象,在首次載入active控制項時,我們會將自己的broker程序寫入列表,而後activex控制項載入,啟動broker程序,問題來了,若我們的broker程序是ie此次啟動後第乙個啟動的外部程序,則不會彈出提示對話方塊,否則會彈出提示對話方塊。而在ie10上,若ie不重啟,在無論如何都會彈出提示對話方塊。我個人覺得安裝完後要求重啟ie是個選擇項。

為了防止activex控制項公升級過程中某些檔案被占用,我對這些檔案建立採用了重構檔名的方式,及filename00x.ext方式,若公升級不成功,序號遞增。其實若檔案被占用,要求使用者關掉ie繼續重試也是乙個方案。

我的公升級檔案沒有採用將相關檔案打包成cab檔案的方式,因為我的安裝比較服務,用cab不會,自己搞不定,我呢寫了個setup.exe,相關檔案資源形式內嵌。在http檔案中object屬性codebase簡單的設定為"setup.exe#version=1,0,0,1"即可。

另外無意讀了另一篇blog,知道了ie10及以後還有增強保護模式,沒太研究,君請看



Qt WinCE安裝 開發及部署全解

花費了三天時間,周轉各大 終於在今天將自己的第乙個qt程式在 小i samsung i718 上跑了起來!一 qt嵌入式環境的搭建 a b 還有乙個是同步的軟體microsoft activesync4.5中文簡體版。安 裝 e 首先安裝vs2005,很簡單,按照嚮導來,在自定義安裝中務必選擇 智慧...

nacos部署及服務開發執行

安裝mysql 注 完成安裝需要建立資料庫nacos config,安裝mysql8報密碼校驗錯誤,執行 1 修改使用者密碼加密規則 alter user root identified by password password expire never 2 更新使用者密碼 alter user r...

Vue專案部署遇到的問題及解決方案

vue router有兩種模式,預設是hash模式,另外一種是history模式。hash 和 history 兩種模式都是基於瀏覽器自身的屬性,vue router只是利用了這兩個特性 底層還是瀏覽器提供的介面 來實現前端路由。一般來說,兩種模式都是可以的。除非在意不太漂亮的 只能選擇 histo...