Введение Как Вы, наверное, знаете, Silverlight приложения могут работать не только внутри, но и вне браузера (OOB, Out-of-Browser). При этом внебраузерные Silverlight приложения фактически устанавливаются на компьютер пользователя и запускаются с него, а не по сети, как в случае с традиционными Silverlight приложениями, что позволяет внебраузерным приложениям работать и в условиях отсутствия сетевого соединения. Ярлык такого приложения при установке располагаться в меню «Пуск» и/или на рабочем столе (всё зависит от выбора пользователя), оно отображается в диалоге установки и удаления программ операционной системы наравне с обычными Windows приложениями. Если же внебраузерное приложение ещё и является доверенным (trusted), то оно получает доступ к некоторым ресурсам компьютера за пределами традиционной для Silverlight приложений песочницы (sandbox). Например, доверенное приложение может обращаться к части файловой системы компьютера, а не только к изолированному хранилищу (isolated storage), сетевым ресурсам, не требуя обязательного наличия на сервере файла кросс доменной политики (cross domain policy file), а также доверенное внебраузерное Silverlight приложение может взаимодействовать с COM (Component Object Model) объектами, такими, как, например, объекты автоматизации Microsoft Office. И, конечно же, это далеко не полный список дополнительных возможностей доверенных внебраузерных приложений. Также стоит сказать, что каждое Silverlight приложение может работать вне браузера, если это явным образом разрешил разработчик, поставив всего одну галочку в свойствах проекта в Visual Studio или написав несколько строк на XML, если Visual Studio по каким-то причинам не используется. Поставить галочку просто, но таким образом нельзя получить всех преимуществ работы вне браузера. Ведь для внебраузерных приложений доступны многие программные интерфейсы (API – Application programming interface), не доступные в браузере. Это и оповещения (notifications), и управление параметрами окна внебраузерного приложения, элементы управления WebBrowser и HTMLBrush, а также широчайшие возможности доверенных внебраузерных приложений, о которых упоминалось выше.
Silverlight клиент для Facebook Многие web разработчики не любят создавать настольные приложения, в том числе и по причине трудности их обновления. Действительно, если мы имеем web приложение, то в большинстве случаев все пользователи работают с последней его версией. Более того, версия у всех одна и та же. В случае же с настольными приложениями мы получаем трудности не только с их обновлением, но ещё и с их установкой. Внебраузерные Silverlight приложения – это попытка привнести достоинства web приложений в мир настольных. Silverlight практически полностью берёт на себя заботы по обновлению внебраузерных приложений, и во многих случаях разработчику задумываться об этом почти не надо. Требуется написать буквально одну строчку кода, а дальше всё происходит автоматически. В дополнение к обновлению, установку и удаление внебраузерных приложений также полностью берёт на себя платформа. Надо отметить, что любые Silverlight приложения, в том числе внебраузерные, одинаково хорошо работают как на Windows, так и на MacOS X. При этом обе платформы официально поддерживаются компанией Microsoft и все возможности внебраузерных приложений доступны на каждой из них. Единственной зависимой от платформы возможностью является взаимодействие с COM объектами, которые присутствуют только в Windows. Кроме того существует проект Moonlight, который обеспечивает работу Silverlight приложений на операционной системе Linux. Это проект с открытым исходным кодом, разрабатываемый компанией Novell при некоторой поддержке со стороны Microsoft. Наблюдается небольшое отставание Moonlight от официальной версии Silverlight, поэтому, если Вы хотите, чтобы Ваши приложения работали и на Linux тоже, не забудьте их протестировать на совместимость с Moonlight. Создание внебраузерного приложения Давайте создадим простое внебраузерное приложение (все примеры далее используют Silverlight четвёртой версии, если не оговаривается иное). Итак, нам понадобится Visual Studio 2010. Запустим её и создадим новый проект. Выберем File -> New -> Project -> Visual C# -> Silverlight.
Тип проекта «Silverlight Application».
Назовём проект «OOBSilverlightApplication».
Нажмём на кнопку «OK» и в открывшемся диалоге «New Silverlight Application» оставим все параметры без изменений.
Очередной раз, нажав на кнопку «OK», мы создадим проект Silverlight приложения и проект web приложения «OOBSilverlightApplication.Web», которое собственно предназначено для хостинга Silverlight приложения. Создавать web приложение имеет смысл практически всегда, кроме случаев, когда Вы не разрабатываете серверную часть для Вашего внебраузерного Silverlight приложения, или внебраузерное приложение взаимодействует только с уже существующими сторонними сервисами.
Для многих может показаться странным то, что в Visual Studio нет отдельного типа проекта внебраузерного Silverlight приложения. На самом деле это связано с тем, что Silverlight приложение в принципе не может быть только внебраузерным. Оно всегда в первый раз запускается в браузере. А уже из браузера пользователь может установить приложение себе на компьютер. Интерфейс приложения в браузере и вне его может быть практически одинаковым, но бывают и ситуации (часто такое происходит с доверенными внебраузерными приложениями), когда в браузере отображается только одна кнопка «установить» и, возможно, некоторое текстовое описание, а вся функциональность доступна исключительно вне браузера. При этом физически приложение представляет собой единственный .xap файл. Разработчик может определить окружение, в котором происходит запуск и в связи с этим коренным образом изменить интерфейс и поведение приложения. Ну что же, вернёмся в Visual Studio. Давайте изменим цвет фона страницы «MainPage.xaml» для того чтобы наше приложение можно было легко идентифицировать. Сделаем это, заменив в строке <Grid x:Name="LayoutRoot" Background="White"> значение цвета фона с «White» на «AliceBlue». Также добавим в менеджер размещения (layout manager) Grid с именем «LayoutRoot», чей фон мы только что меняли, кнопку, при нажатии на которую пользователь сможет установить приложение. <Button x:Name="btnInstall" Content="Установить приложение" Width="150" Height="50"/>
Двойным щелчком по кнопке в визуальном дизайнере создадим обработчик события нажатия данной кнопки. В обработчике напишем код, вызывающий диалог установки приложения в случае, если оно ещё не было установлено. private void btnInstall_Click(object sender, RoutedEventArgs e)
{
if (Application.Current.InstallState == InstallState.NotInstalled)
{
Application.Current.Install();
}
}
Учтите только, что с помощью значения свойства Application.Current.InstallState нельзя проверить запущено приложение в браузере или вне его. Для этого существует другое свойство Application.Current.IsRunningOutOfBrowser. Используя его, поменяем цвет фона нашего приложения на оранжевый, в случае, если приложение работает вне браузера. Сделать это проще всего в конструкторе страницы MainPage. public MainPage()
{
InitializeComponent();
if (Application.Current.IsRunningOutOfBrowser)
{
LayoutRoot.Background = new SolidColorBrush(Colors.Orange);
}
}
Кроме того, добавим в конструктор страницы MainPage код, который при изменении состояния установки приложения будет показывать сообщение об этом.Application.Current.InstallStateChanged += (sender, e) =>
{ MessageBox.Show(Application.Current.InstallState.ToString()); };
Сейчас мы можем запустить наше приложение, но при нажатии на кнопку, получим исключение (exception) «Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))». Это происходит, так как мы не указали, что приложение вообще может работать вне браузера. Для того чтобы оно могло так работать, в контекстном меню проекта «OOBSilverlightApplication» в окне «Solution Explorer» выберем пункт «Properties».
В появившемся диалоге на первой вкладке («Silverlight») установим галочку «Enable running application out of browser». В принципе, для корректной работы вне браузера больше ничего не требуется. Однако всегда следует задать базовые настройки внебраузерного приложения.
Нажмём на кнопку «Out-of-Browser Settings…» и в появившемся диалоговом окне установим Заголовок окна внебраузерного приложения (Window Title): «Тестовое приложение».
Текст ярлыка внебраузерного приложения (Shortcut name): «Тест».
Описание приложения (Application Description): «Описание».
Если Вы хотите, чтобы Ваше внебраузерное приложение было доверенным, установите галочку «Require elevated trust when running outside the browser». При этом пользователю будет показан другой диалог установки, предупреждающей о том, что приложение имеет доступ к ресурсам компьютера и может нанести ему вред. Диалоговое окно «Out-of-Browser Settings» на самом деле редактирует файл «OutOfBrowserSettings.xml», расположенный в папке «Properties» проекта Silverlight приложения и создаваемый при первой установке галочки «Enable running application out of browser». После наших изменений в настройках файл «OutOfBrowserSettings.xml» выглядит следующим образом. <OutOfBrowserSettings ShortName="Тест" EnableGPUAcceleration="False" ShowInstallMenuItem="True">
<OutOfBrowserSettings.Blurb>Описание</OutOfBrowserSettings.Blurb>
<OutOfBrowserSettings.WindowSettings>
<WindowSettings Title="Тестовое приложение" />
</OutOfBrowserSettings.WindowSettings>
<OutOfBrowserSettings.SecuritySettings>
<SecuritySettings ElevatedPermissions="NotRequired" />
</OutOfBrowserSettings.SecuritySettings>
<OutOfBrowserSettings.Icons />
</OutOfBrowserSettings>
Теперь давайте запустим приложение. Для его установки нажмите на кнопку «Установить приложение» или кликните правой кнопкой мыши в любом его месте и выберете в контекстном меню пункт «Install Тест onto this computer…». Благодаря данному пункту меню пользователь может установить приложение даже, если мы удалим созданную нами кнопку. Естественно и сам пункт меню можно скрыть, сняв галочку «Show install menu» в окне «Out-of-Browser Settings». После нажатия на кнопку или соответствующий пункт меню перед нами появится диалоговое окно установки приложения. В данном случае иконка приложения стандартная, так как свою иконку мы не задали. Если бы производилась установка доверенного приложения, то диалоговое окно выглядело бы по-другому. Выберем опцию добавления ярлыка приложения на рабочий стол (Desktop) и нажмём на кнопку «OK» или «Install» в зависимости от типа приложения. Отобразится несколько сообщений о смене состояния установки, что происходит благодаря написанному нами коду, и приложение запустится вне браузера. Весь процесс установки завершается практически мгновенно. Как Вы видите, цвет фона вне браузера отличается от цвета фона в браузере, как мы того и хотели. Ярлык нашего приложения доступен в меню Пуск. А также на рабочем столе. Кроме того оно отображается в диалоге установки и удаления программ операционной системы. Вообще, если говорить про удаление внебраузерного Silverlight приложения, то пользоваться диалогом установки и удаления операционной системы не обязательно. Когда приложение установлено, то и в браузере и вне его в контекстном меню Сильверлайта вместо пункта «Install Тест onto this computer…» отображается пункт «Remove this application…». Удаление, как и установка, происходит почти мгновенно. Заключение Как Вы видите создавать и использовать внебраузерные Silverlight приложения максимально просто. Надо отметить только, что в случае MacOS X ярлыки внебраузерных приложений располагаются в других местах, а диалоги выглядят в соответствии с оформлением операционной системы. Сами же приложения ведут себя и работают точно также. Разработчикам стоит учитывать, что системные администраторы с помощью групповых политик могут запретить установку и/или запуск доверенных внебраузерных приложений. Это может быть оправдано с точки зрения политики безопасности организации. Поэтому не стоит требовать расширенных прав «на всякий случай». Если Вам достаточно возможностей обычных внебраузерных приложений – создавайте обычные, а не доверенные внебраузерные приложения.
Recent Comments