2009年3月2日 星期一

[plugin] ActiveX 元件版本問題

"有新版本就下載, 沒有就不下載" 這件事有哪麼困難嗎?

 

有時候就是會讓人搞不清楚狀況. 總之, 如果你希望元件能按照正常的行為,

 最笨的方法就是, 在下面三個地方加入一樣的版本號碼. 保證元件乖乖聽話!

   Step 1. ocx 本身在 resource 裡面的四個版本資源, 設定一樣的版本號碼

   Step 2. html 中 object tag 裡面的 #version 版本號碼

   Step 3. inf 中相關描述的版本號碼 (關係到是否從 cab 中把資料搬出來)

 

原理

IE 每次遇到 object tag, 就會比對 目前使用者電腦上元件的版本(ocx 上的版本) 與 Server 藉由 html #version 所告知的目前最新 ocx 版本序號.

這個意思是:

          ocx 裡面的序號: 會在 client 端檢查本身安裝 ocx 版本時使用

         html 裡面的 #version: 是 server 端告知目前最新版本的 ocx 序號

所以

                  html 通知有新的 ocx 版本時 =>   client 就會下載
    (html #version 號碼 > 使用者之前已經下載的 ocx 版本號碼)

問題 1:  為何每次開 IE都會被要求重新安裝 ocx ?

<sol> 你的 html #Version 永遠大於 使用者機器上 ocx 元件的版本

這是因為你在設計階段把 html #Version > 你將要發佈的 ocx 元件版本.

這使得使用者每次下載的 ocx 版本, 在比對時都會因為 html 版本比較新, 而被告知有新版本出現, 讓 IE 都會重新下載 ocx.

解決方法:

         到 VC 裡面把 ocx 版本調整成 html #Version 描述的一樣

 

問題 2:  為何每次開 IE都不會安裝 ocx ?

<sol> 這是因為你的 html #Version 永遠小於 使用者機器上 ocx 的版本

這是因為你在設計階段 html #Version <  你將要發佈的 ocx 版本

原因:

有可能你以前裝的 ocx 版本號碼很高, 而又因為某種原因將 ocx 版本降低, 這使得你在 html 上通知發佈的版本序號, 可能在某些使用者的機器無法下載.

不下載的原因是: 該名安裝過高版本序號 ocx 的 user, 一直都認為自己的 ocx 比較新, 不需要下載.

解決方法:

<方法 1>

     Step 1: 要求使用者開啟

                      [Internet Options] -> [Browsing history] -> [Setting] -> [View objects]

                     然後,  手動清掉安裝的 ocx

 

<方法 2>

    Step 1: 發佈另一個強迫下載網頁, 將其中 object tag #Version 設定為 -1,-1,-1,-1

    Step 2: 要出問題的使用者, 開 IE 重新連線

        這將會強迫使用者安裝目前 server 上的 ocx, 會統一使用目前 server 
         的 ocx 版本

    Step 3: 然後要使用者連到正常網頁測試 (這時應該不會被要求下載)

 

 

問題 3:  如何讓 ocx 根據本身上傳的時間, 決定是否下載?

<sol> 將html #Version 設定為 -1,-1,-1,-1 即可.

注意: 有可能你的 Server 時間會跟使用者不同 (一個美國, 一個台灣)

 

希望能解決大家對 ActiveX 元件版本的困惑.

Enjoy.

 

by Jing

2 則留言:

  1. 我用 VC 寫了一個 OpenGL 3D Scene Graph OCX, 請問一下要怎麼用 JavaScript 檢查 ActiveX 的版本, 或是檢查 ActiveX 是否已經安裝

    回覆刪除
  2. 如果你客戶機器上的 ocx 版本與他瀏覽的網頁版本號碼不同 (較舊), IE 就會自動接手提醒使用者下載 位於 codebase 標籤所指的 ocx.

    至於如何檢查使用者電腦內已經安裝的 ActiveX 元件版本, 我對 JavaScript 不熟悉, 所以我就不清楚了.

    只是我很納悶, IE 會讓 JavaScript 檢查使用者機器內軟体元件的版本嗎? 這似乎會造成安全問題. 我猜... 只是猜測.... 應該無法做到吧.

    如果你希望使用者的機器, 一發現有新的版本就自動下載. 那麼只要把我提到的那三個版本編號設定正確. 那就會達到你的要求了.

    不好意思, 我懂的實在不多.

    回覆刪除