溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

發(fā)布時(shí)間:2021-12-18 14:52:35 來源:億速云 閱讀:152 作者:小新 欄目:編程語言

這篇文章主要介紹了在瀏覽器外如何運(yùn)行Silverlight應(yīng)用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Silverlight3一個(gè)很顯著的特點(diǎn)就是其應(yīng)用可以在瀏覽器外運(yùn)行。就是說一個(gè)在瀏覽器中運(yùn)行的應(yīng)用可以被獨(dú)立(detached)出來,并通過一 個(gè)桌面和開始菜單欄圖標(biāo)來啟動(dòng)執(zhí)行,而不在需要有網(wǎng)絡(luò)連接。這樣給人的感覺其就像一個(gè)普通的桌面應(yīng)用而不是一個(gè)瀏覽器應(yīng)用程序。

為了實(shí)現(xiàn)獨(dú)立(detached),用戶必須對(duì)這類應(yīng)用有個(gè)明確的選擇:“該應(yīng)用在沒有用戶通知的情況下是不可以detached它自己的。下面用一 個(gè)例子“Hello World”來展示一下:

<USERCONTROL PRE x:Class="SilverlightApplication1.MainPage" <>
<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation%22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml%22Width="400" Height="300">
<StackPanel x:Name="LayoutRoot" Background="White">
<TextBlock x:Name="txtStatus" Text="Not Set" HorizontalAlignment="Center" Margin="10" />
<Button Content="Click Me" Click="OnClicked" Margin="10"/></StackPanel></UserControl>

還有一些代碼:

public partial class MainPage : UserControl{public MainPage()
{InitializeComponent(); OnExecutionStateChanged(null, null);
App.Current.ExecutionStateChanged += OnExecutionStateChanged; }
void OnExecutionStateChanged(object sender, EventArgs e)
{txtStatus.Text = App.Current.ExecutionState.ToString();}
void OnClicked(object sender, RoutedEventArgs args)    

{ App.Current.Detach();
}}

然后我們?cè)跒g覽器中運(yùn)行它并看到一個(gè)新的鼠標(biāo)右擊菜單:

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

其允許將該應(yīng)用獨(dú)立出來并安裝到本地。并且你會(huì)注意到,該菜單項(xiàng)是灰色的。同樣地,我們可以在按鈕事件中加入一些代碼并嘗試分離這 個(gè)應(yīng)用。void OnClicked(object sender, RoutedEventArgs args){      App.Current.Detach();} 但它并 沒有啟作用,因?yàn)橛益I菜單依舊是灰的.原因在于這個(gè)應(yīng)用沒有相應(yīng)的元數(shù)據(jù)支持。為了提供元數(shù)據(jù),我們要編輯一下 appmanifest.xml 文件 :

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">  
<Deployment.Parts></Deployment.Parts>  
<Deployment.ApplicationIdentity><ApplicationIdentity ShortName="Mike's Silverlight App" Title="Mike's App Window"><ApplicationIdentity.Blurb>Mikes Application Blurb</ApplicationIdentity.Blurb><ApplicationIdentity.Icons><Icon Size="16x16">icons/16x16.png</Icon><Icon Size="32x32">icons/32x32.png</Icon><Icon Size="48x48">icons/48x48.png</Icon><Icon Size="128x128">icons/128x128.png</Icon></ApplicationIdentity.Icons></ApplicationIdentity></Deployment.ApplicationIdentity></Deployment>

注:上面這些圖標(biāo)文件必須在VS中以內(nèi)容"Content"的文件嵌入到XAP文件中。但我并不確保你也需要這里所有的文件,特別是這個(gè) "128x128"(文件);

這樣當(dāng)單擊鼠標(biāo)右鍵后該菜單項(xiàng)將會(huì)變成“有效”:

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

接著,我們前面創(chuàng)建的這個(gè)按鈕將會(huì)觸發(fā)一個(gè)對(duì)話框,提供給我們兩個(gè)選項(xiàng):“將這個(gè)要運(yùn)行在瀏覽器外的應(yīng)用安裝到桌面或開始菜單中” 。

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

注:那是個(gè)標(biāo)準(zhǔn)對(duì)話框,而通過使用我本人頭像設(shè)置的對(duì)話框是下面這個(gè)樣子

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

但我不打算這樣做,我想還是顯示標(biāo)準(zhǔn)對(duì)話框會(huì)好一些。

如果點(diǎn)擊該對(duì)話框后,該應(yīng)用會(huì)嘗試 detach 它自身。對(duì)我而言,它所做的工作就是確保本地XAP文件的有效性。而不是去嘗試把其它與它 相關(guān)聯(lián)的資源也獲取到本地。

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

注:第二個(gè)應(yīng)用拷貝現(xiàn)在運(yùn)行在了窗體中,它與瀏覽器窗體還是有一些區(qū)別的。

現(xiàn)在我在桌面上有了該應(yīng)用的一個(gè)圖標(biāo):

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

并且在開始菜單中也有:

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

如果我從這兩個(gè)地方運(yùn)行這個(gè)應(yīng)用時(shí),會(huì)看到一個(gè)“非瀏覽器”的應(yīng)用:

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

此時(shí)當(dāng)我在瀏覽器中運(yùn)行這個(gè)原始(版本)的應(yīng)用時(shí),它顯示了相同的“Detached”狀態(tài):

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

好的,現(xiàn)在我修改一下原應(yīng)用,將背景設(shè)置為"red":

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

然后再次運(yùn)行并發(fā)布這個(gè)新的XAP到WEB服務(wù)器上。起初,它顯示“Detached”,然后它切換到“DetachedUpdatesAvailable".這意味著可以 告訴用戶該應(yīng)用已被更新,并提示他們重啟該應(yīng)用:

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

之后,將他們?cè)龠\(yùn)行該應(yīng)用時(shí),會(huì)獲取到新的版本(我更新到服務(wù)器上的那個(gè)版本):

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

如果想刪除該應(yīng)用,可以在本地的“detached”拷貝或?yàn)g覽器中右擊菜單:

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

如果我點(diǎn)擊上面菜單后,就會(huì)將開始菜單和桌面圖標(biāo)移除,這樣在瀏覽器中該應(yīng)用的狀態(tài)就從“Detached”變 成了“RunningOnline”.

在瀏覽器外如何運(yùn)行Silverlight應(yīng)用

盡管 App.Current.ExecutionState屬性返回“Detached”,但這與你在瀏覽器或本地運(yùn)行該應(yīng)用是無關(guān)的。這是需要有另一個(gè)標(biāo)志來決定 該應(yīng)用是從瀏覽器還是從本地(分離)啟動(dòng)。

在Application中有一個(gè)標(biāo)志即“RunningOffline”,看上去它會(huì)返回true/false 狀態(tài)。True意味著當(dāng)前應(yīng)用是從本地獨(dú)立啟動(dòng)的,而 False則是在瀏覽器中啟動(dòng)的。

就當(dāng)前應(yīng)用實(shí)際運(yùn)行的代碼而言,當(dāng)其離線時(shí)(offline),存在一個(gè)進(jìn)程(文件位于:Program Files\Microsoft Silverlight\VERSION\sllauncher.exe).看上去它就是通過應(yīng)用名稱去運(yùn)行相應(yīng)程序。使用Reflector去瀏覽一下,發(fā)現(xiàn)其進(jìn)程好像是非托管的 運(yùn)行,因此我不認(rèn)為能從中能獲取一些內(nèi)部信息。但其值得一說的是該launcher的roles之一就是保持應(yīng)用的上下文安全。即:如果應(yīng)用是從域 foo.com獲取,那么該應(yīng)用就必須本地化運(yùn)行。盡管它是從foo.com上啟動(dòng)(launched)的。

還有要注意的是這種detached在功能上貌似依賴于Isolated Storage(隔離)存儲(chǔ)。因?yàn)槲野l(fā)現(xiàn)當(dāng)把應(yīng)用“detached”時(shí),必須在打開 Isolated Storage,真是如此。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“在瀏覽器外如何運(yùn)行Silverlight應(yīng)用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI