1

Тема: Запуск приложения Silverlight 3 вне браузера

Silverlight 3 – Запуск приложения вне браузера

Одна из многих новых возможностей Silverlight 3 – создание приложений работающих без браузера. На первый взгляд эту новую возможность можно расценить как следование по стопам Adobe AIR, но, учитывая некоторые важные аспекты, можно найти между ними существенные различия. На самом деле возможность запуска вне браузера в Silverlight имеет гораздо больше общего с Prism от Mozilla или Google Gears.

Все потому, что в отличии от Adobe AIR, внебраузерная возможность Silverlight сводится именно к копированию XAP-файла на локальную машину. Конечно же, даже когда приложение запущено вне браузера оно все еще в каком-то смысле является частью браузера, поскольку оно запускается в «песочнице» браузера. Это открывает еще одно существенное различие между AIR и внебраузерным Silverlight-приложением: права доступа Silverlight-приложения не изменяются от того, запущено ли оно в браузере или без него. В то время  как AIR получает набор новых прав, которые не предоставляются при запуске в браузере. Это означает, что внебраузерный запуск Silverlight не получит никаких прав к файловой системе, и другим ресурсам, которые доступны для AIR.

Так что это дает, спросите вы? Да то же самое, что Gears и Prism: возможность работать без соединения с Интернет, и возможность сделать веб-приложение более похожим на настольное приложение.

Ладно. Достаточно рассказов о том, что такое внебраузерное приложение Silverlight. Настало время узнать, как его создать. Мы будем использовать небольшое Netfix Silverlight-приложение, которое я позаимствовал из руководства Reddest’а - Silverlight and the Netflix API. Я лишь слегка модифицировал его чтобы воспользоваться некоторыми новыми возможностями в Silverlight 3, в том числе добавил возможность запуска вне браузера. Можете проверить его работу вне браузера: для этого кликните правой кнопкой мыши по плагину ниже и выберите пункт меню «Install … onto this computer».

Thumbs up Thumbs down

2

Re: Запуск приложения Silverlight 3 вне браузера

Здорово, правда? И сделать это самому совсем несложно для любого приложения Silverlight. Для этого откройте Silverlight-проект в Visual Studio, правым кликом мыши про проекту в панели «Solution Explorer» перейдите в Свойства (Properties) проекта:

Контекстное меню проекта

Перейдя на страницу свойств, нужные параметры настройки появятся прямо перед вами (если что-то пойдет не так, ориентируйтесь по стрелкам, которые я изобразил на скриншоте ниже):

Свойства (Properties) проекта

Первым делом вам следует проверить флажок опции «Enable running application out of the browser» («Разрешить запуск приложения вне браузера»). Это основной пункт из всего, что вы должны сделать. Возможно, вы еще захотите изменить и другие настройки доступные на кнопке справа (Out-of-Browser Settings...). На скриншоте ниже вы видите диалоговое окно, открывающееся по нажатию этой кнопки:

Дополнительные настройки запуска вне браузера

Этот диалог позволяет настроить такие элементы, как заголовок она и несколько вариантов иконок. Все достаточно просто и понятно, но есть одно замечание: все файлы иконок должны быть в формате PNG. В чем причина такого требования я не знаю, и это немного сбило меня с толку, когда я пытался использовать стандартный формат иконок (ico).

Thumbs up Thumbs down

3

Re: Запуск приложения Silverlight 3 вне браузера

Теперь, сделав все необходимые настройки, вы можете обнаружить появление нового файла в дереве проекта, который называется “OutOfBrowserSettings.xml”:

OutOfBrowserSettings.xml

В этом файле сохраняется вся введенная вами информация о конфигурации. Например, в случае с приложением Netflix содержимое файла будет примерно следующим:

<OutOfBrowserSettings ShortName="SOTC Silverlight Netflix Example" 
                     EnableGPUAcceleration="False" ShowInstallMenuItem="True">
  <OutOfBrowserSettings.Blurb>
    Switch on the Code "Out of Browser" Silverlight Example - a Netflix search app
  </OutOfBrowserSettings.Blurb>
  <OutOfBrowserSettings.WindowSettings>
    <WindowSettings Title="SOTC Netflix Out Of Browser Example" 
                   Height="500" Width="512" />
  </OutOfBrowserSettings.WindowSettings>
  <OutOfBrowserSettings.Icons>
    <Icon Size="16,16">SOTCLogo16.png</Icon>
    <Icon Size="32,32">SOTCLogo32.png</Icon>
    <Icon Size="48,48">SOTCLogo48.png</Icon>
    <Icon Size="128,128">SOTCLogo128.png</Icon>
  </OutOfBrowserSettings.Icons>
</OutOfBrowserSettings>

Вполне очевидно, что все это сюда попало из диалога настроек для режима работы вне браузера.

Это все, что вам нужно сделать, чтобы Silverlight-приложение могло работать вне браузера. «Но погодите», скажете вы, «как насчет кнопки Установить?». Что ж, вам не нужна эта кнопка. Эта возможность автоматически станет доступна в контекстном меню Silverlight (по клику правой кнопкой) как только вы активируете нужный флажок на странице свойств проекта:

Silverlight-меню

Но создание такой кнопки – задача на редкость простая. Вот код, который должен присутствовать в обработчике кнопки:

private void InstallOutOfBrowser(object sender, RoutedEventArgs e)
{
  if (!Application.Current.IsRunningOutOfBrowser)
  { Application.Current.Install(); }
}

Проверка статуса запуска приложения (в браузере или без него) сводится к чтению свойства IsRunningOutOfBrowser. Инициация процесса установки тоже проста – для этого всего лишь нужно вызвать метод Install.

Thumbs up Thumbs down

4

Re: Запуск приложения Silverlight 3 вне браузера

Итак, что же произойдет, когда пользователь нажмет «Установить»? Он увидит диалог похожий на этот:

Установить приложение вне браузера

Тут предоставляется возможность выбрать размещение ярлыков приложения, и этот выбор доступен только в диалоге установки. И, как вы видите, этот тот случай, когда пригождается иконка размером 128x128 и краткое имя (Shortcut Name), которое представляется пользователю как имя устанавливаемого приложения. Через несколько секунд после того, как пользователь нажмет кнопку Ок, приложение загрузится в своем собственном окне:

Out of browser Silverlight application

И если пользователь выбрал «добавить ярлык в меню Пуск», то выглядеть ярлык приложения будет как на следующей картинке:

Ярлык в меню пуск

Установленное вне браузера приложение Silverlight не будет присутствовать в списке «Установки и удаления программ» Windows, тогда как же можно будет от него избавиться? Удаляется приложение также просто, как и устанавливается: через контекстное меню:

Удалить приложение Silverlight

Thumbs up Thumbs down

5

Re: Запуск приложения Silverlight 3 вне браузера

Вот и все, что входит в жизненный цикл внебраузерного Silverlight-приложения. Перед тем как мы закончим, я все же хочу показать вам еще кое-что. Поскольку приложение Silverlight устанавливается локально, то нет никакой гарантии, что при его последующем запуске компьютер будет соединен с Интернет. Компания Microsoft предоставила в наше распоряжение простой способ определения наличия сетевого соединения. Для этого вы можете использовать метод NetworkInterface.GetIsNetworkAvailable:

if (!NetworkInterface.GetIsNetworkAvailable())
{
  MessageBox.Show("Соединение отсутствует – поиск недоступен.");
  return;
}

Все что делает этот метод – это возвращает булево значение «true», если компьютер подключен к сети, и «false» в противном случае. Само собой наличие сетевого соединение не всегда означает, что имеется доступ в Интернет, но все же это хороший способ проверить обратное.

Итак, наше знакомство с внебраузреными Silverlight-приложениями подходит к концу. Вы можете скачать пример приложения в zip-файле приложенном ниже, если вдруг захотите сами поковыряться в коде, и оставить комментарий в случае, если возникнут какие-либо вопросы.


(источник материала: Silverlight 3 - An Out Of Browser Example)

Thumbs up Thumbs down

6

Re: Запуск приложения Silverlight 3 вне браузера

ЗАМЕЧАНИЯ И ДОПОЛНЕНИЯ


Установку приложения в качестве настольного нельзя произвести автоматически. Такое действие должно быть инициировано пользователем через контекстное меню плагина или же в обработчике события определенной кнопки, в котором происходит вызов метода Application.Current.Install().


Часто после установки для работы вне браузера интерфейс текущего приложения требует некоторых изменений. Например, после установки больше нет необходимости в копке "Установить" (если таковая имеется). Чтобы отловить событие завершения установки Silverlight приложения на компьютер пользователя используйте событие Application.Current.InstallStateChanged.


Чтобы узнать, установленно ли приложение на данном компьютере используйте проверку статуса через Application.Current.InstallState.


Чтобы определить, запущено ли приложение как настольное, используйте свойство Application.Current.IsRunningOutOfBrowser.


В момент установки кроме самого XAP файла приложения также сохраняются метаданные, которые помимо всего прочего включают в себя время модификации файла и оригинальный URI источника.


Приложение размещенное на сервере может обновляться и, соответственно требуется обновлять его локальную копию, работающую вне браузера. Для этого вы можете вызвать метод Application.Current.CheckAndDownloadUpdateAsync() предварительно подписавшись на событие Application.Current.CheckAndDownloadUpdateCompleted. Если Silverlight обнаруживает, что XAP файл на сервере отличается от локального, тогда он автоматически обновляет его. Если же различий не обнаружено, локальный XAP-файл остается без изменений. В любом случае после завершения проверки вызывается событие CheckAndDownloadUpdateCompleted и в его обработчик передается аргумент типа CheckAndDownloadUpdateCompletedEventArgs содержащий поле UpdateAvailable, значение которого равно true если локальный XAP файл был обновлен. Теперь, чтобы закаченное обновление вступило в силу необходимо вынудить пользователя перезапустить настольное Silverlight приложение.

Thumbs up Thumbs down