天天看點

Silverlight 5 OOB應用程式不能正常更新的特殊情況

之前開發了一個Silverlight 5的OOB應用程式,但是在更新上遇到一種特殊情況。

承載在浏覽器中的Silverlight應用程式可以自動更新,但是OOB應用程式可能處于安全性的看哦啊率卻不能自動更新,需要調用一個檢查更新的方法來手動執行更新。

首先為Application的CheckAndDownloadUpdateCompleted事件注冊一個處理程式,如下:

然後在建立一個更新按鈕,在按鈕點選事件中添加檢查更新的代碼,如下:

當然,以上代碼也可以放到頁面加載事件中,讓程式每次啟動的時候都自動檢查更新,但是最佳實踐是,建立一套自動檢查版本的機制,然後提示使用者有更新,再運作上述代碼。

最後,就是編寫更新完成後的處理代碼,如下:

這就是更新OOB應用程式的基本方法。

MSDN文檔中對于提升信任後的OOB應用程式的更新,有一個特殊說明,如下:

這句話的意思就是,如果前後更新使用了不同簽名檔案,或者老版本沒有簽名,新版本進行了簽名,這兩種情況都會導緻不能進行更新,需要解除安裝重裝。

也就是這句話誤導了我半天。

我開發的OOB應用程式一開始是可以進行更新的,後來不知為何不能進行更新了。尋找了各種原因,嘗試了各種方法,推測了各種情況,都無果而終。

最後,我單獨建立了一個測試項目來對比測試,在所有配置和代碼都一樣的情況卻可以更新,讓我開始考慮是否是Silverlight SDK有問題。在對比了整個項目的檔案後,發現測試項目比正式項目少一個檔案——InBrowserSettings.xml。這個檔案其實是 Silverlight 5提供的一個新特性,即在浏覽器内提升信任功能生成的一個配置檔案。

這個檔案估計是什麼時候,我嘗試勾選”提升浏覽器内信任“的選項的時候,生成的;于是我删除了InBrowserSettings.xml這個配置 檔案。還是問題依舊,不過感覺已經接近問題所在了。之前有過經驗,一些配置資訊之csproj中也會記錄,是以打開csproj檔案,發現裡面有 InBrowserSettingsFile和RequireInBrowserElevation節點;于是把這兩個節點删除後,經測試就可以更新成功 了。