Silverlight如何設定應用程式獨立於瀏覽器執行
本文介紹如何使用VS2010 BETA2來開發可獨立於瀏覽器的Silverlight應用程式,讓讓Silverlight應用程式獨立執行,附加: 儲存與執行下載的Silverlight應用程式檔案。
1 讓Silverlight應用程式獨立執行
使用Visual Studio 2010,可以很方便地將一個現有的Silverlight應用程式轉換為獨立執行。
具體操作很簡單,在Visual Studio 2010中開啟Silverlight專案的屬性頁,在其Silverlight選項卡中選中“Enable running application out of the browser”選項,如下圖所示:
點選右部的“Out-of-Browser Settings…”,可以設定更多的選項:
可以看到,在這個對話視窗中可以設定圖示,窗體大小等一些引數。最有趣的是左下角的兩個引數:
l Use GPU Acceleration:使用本機顯示卡的硬體加速,當Silverlight應用程式使用了大量的動畫時,選中此項可以提升執行速度。之所以可以做到這點,是由於Silverlight應用程式是在客戶端直接執行的,Silverlight執行時可以直接呼叫本地硬體所提供的計算能力。
l Show install menu:當選中此項時,在瀏覽器中右擊,會在右鍵選單中多一項命令:
將 XXX 安裝到此計算機…
執行此命令,將出現一個嚮導:
單擊確定即可安裝。
多懂一點:
儲存與執行下載的Silverlight應用程式檔案
預設情況下,下載的Silverlight程式檔案放置於當前登入使用者的個人資料資料夾下,請在安裝Windows的驅動器上查詢以下資料夾,就可以發現下載的Silverlight程式檔案放在此資料夾的子資料夾(比如“40171400.localhost”)裡。
\Users\登入使用者名稱\AppData\LocalLow\Microsoft\Silverlight\OutOfBrowser\ 40171400.localhost
上面的數字是由Silverlight安裝程式隨機生成的,用於區分本機所安裝的Silverlight應用程式。
Silverlight應用程式的執行是由一個名為sllauncher.exe的程式負責的,它將接收一個儲存了Silverlight應用程式檔案的資料夾名。
\Program Files\Microsoft Silverlight\sllauncher.exe 40171400.localhost
有趣的是,安裝到本地的Silverlight應用程式不會出現的控制面板“新增刪除程式”的列表中,如果要刪除程式,需要先執行它,然後右擊,從彈出選單中選擇“刪除此應用程式”命令。
要刪除Silverlight應用程式,需要完成兩個步驟:
(1) 刪除保存於使用者資料夾中的程式檔案
(2) 刪除快捷方式。
2 程式設計控制Silverlight應用程式的安裝過程
我們可以在Silverlight應用程式中使用程式碼來直接啟動安裝過程,這需要呼叫Application物件的Install()方法。
App.Current.Install();
上面程式碼中的App.Current引用當前的Silverlight Application物件例項。
注意:
如果沒有給Silverlight專案設定“Enable running application out of the browser”選項,直接呼叫Install()方法強制安裝Silverlight應用程式到本地,則Silverlight外掛將會引發一個ManagedRuntimeError,應用程式將會被強制結束。
另外,如果本Silverlight應用程式已經安裝到本地了,再次呼叫Install()方法會引發一個InvalidOperationException異常。
應用程式可以通過檢測一下Aplication物件的InstallState屬性來避免二次安裝。
if (App.Current.InstallState == InstallState.NotInstalled)
App.Current.Install();
else
tbInfo.Text = "本應用程式已經安裝,謝謝使用!";
另外,Aplication物件提供了一個InstallStateChanged事件用於跟蹤安裝狀態的改變,可以編寫程式碼響應此事件,通知使用者安裝完成:
//在頁面建構函式中掛接InstallStateChanged事件
App.Current.InstallStateChanged +=
new EventHandler(Current_InstallStateChanged);
以下是事件響應程式碼:
void Current_InstallStateChanged(object sender, EventArgs e)
{
if (App.Current.InstallState == InstallState.Installed)
tbInfo.Text = "安裝完成,您可以直接在桌面或開始選單中執行此應用程式";
}
另外,Aplication物件還有一個IsRunningOutOfBrowser屬性用於檢測Silverlight應用程式是否運行於瀏覽器環境內。
示例程式專案OutOfBrowserSilverlightApplication綜合了上述程式設計技巧,展示了一個Silverlight應用程式的安裝與解除安裝的基本方法。