Общие сведения о приложениях браузера WPF XAML
Приложения браузера XAML (XBAP) объединяют функции веб-приложений и полнофункциональных клиентских приложений. Как и в веб-приложениях, XBAPs можно развернуть на веб-сервере и запустить из Internet Explorer или Firefox в Windows. Как многофункциональные клиентские приложения, XBAP могут использовать все возможности WPF. Кроме того, XBAP разрабатываются аналогично многофункциональным клиентским приложениям. Этот раздел содержит простое, общее введение в разработку XBAP и показывает, чем она отличается от разработки стандартных многофункциональных клиентов.
Предупреждение
Для работы XBAPs требуются устаревшие браузеры, такие как Internet Explorer и старые версии Firefox. Эти старые браузеры обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Подключаемые модули, поддерживающие XBAP, больше не поддерживаются. Дополнительные сведения см. в разделе часто задаваемые вопросы о приложениях, размещенных в браузере WPF (XBAP).
Этот раздел состоит из следующих подразделов.
Создание приложения обозревателя XAML (XBAP)
Проще всего создать проект XBAP с помощью Visual Studio. При создании нового проекта выберите из списка шаблонов приложение браузера WPF. Дополнительные сведения см. в разделе Практическое руководство. Создание нового проекта приложения обозревателя WPF.
При запуске проект XBAP откроется в окне браузера, а не в отдельном окне. При отладке XBAP в Visual Studio приложение выполняется с разрешениями зоны Интернета и в случае, если эти разрешения будут превышены, выдает исключения безопасности. Дополнительные сведения см. в разделах Безопасность и Безопасность частичного доверия в WPF.
Примечание.
Если вы не используете Visual Studio при разработке или хотите изучить файлы проекта более подробно, см. раздел Построение приложения WPF.
Развертывание XBAP
При построении XBAP создаются следующие три файла:
Файл | Description |
---|---|
Исполняемый файл (.EXE) | Содержит скомпилированный код и имеет расширение EXE. |
Манифест приложения (.MANIFEST) | Содержит метаданные, связанные с приложением, и имеет расширение MANIFEST. |
Манифест развертывания (.XBAP) | Этот файл содержит сведения, которые ClickOnce использует для развертывания приложения, и имеет расширение .xbap. |
XBAP развертываются на веб-сервере, например Microsoft IIS (IIS) 5.0 или более поздних версий. Не требуется устанавливать на веб-сервере .NET Framework, однако необходимо зарегистрировать MIME-типы WPF и расширения имен файлов. Дополнительные сведения см. в разделе Практическое руководство. Настройка служб IIS 5.0 и IIS 6.0 для развертывания приложений WPF.
Чтобы подготовить XBAP для развертывания, скопируйте файл EXE и связанные с ним манифесты на веб-сервер. Создайте HTML-страницу, содержащую гиперссылку, чтобы открыть манифест развертывания, который является файлом с расширением XBAP. Когда пользователь щелкает ссылку на XBAP-файл, ClickOnce автоматически обрабатывает механизм скачивания и запуска приложения. В следующем примере кода показана HTML-страница, которая содержит гиперссылку, указывающую на XBAP.
<html>
<head></head>
<body>
<a href="XbapEx.xbap">Click this link to launch the application</a>
</body>
</html>
Кроме того, XBAP можно разместить во фрейме веб-страницы. Создайте веб-страницу с одним или несколькими фреймами. Назначьте исходное свойство фрейма файлу манифеста развертывания. Чтобы использовать встроенный механизм взаимодействия между веб-страницей размещения и XBAP, необходимо разместить приложение во фрейме. В следующем примере кода показана HTML-страница с двумя фреймами; в качестве источника для второго фрейма выбран XBAP.
<html>
<head>
<title>A page with frames</title>
</head>
<frameset cols="50%,50%">
<frame src="introduction.htm">
<frame src="XbapEx.xbap">
</frameset>
</html>
Очистка кэшированных XBAP
В некоторых случаях после повторной сборки и запуска XBAP может оказаться, что открывается более ранняя версия XBAP. Это может произойти, например, если номер версии сборки XBAP статичен и XBAP запускается из командной строки. В этом случае в связи с тем, что номер кэшированной версии (версии, запущенной ранее) и новой версии остаются прежними, новая версия XBAP не загружается. Вместе нее загружается кэшированная версия.
В подобном случае можно удалить кэшированную версию с помощью команды Mage (устанавливается вместе с Visual Studio или Windows SDK) в командной строке. Следующая команда очищает кэш приложения.
Mage.exe -cc
Она обеспечивает запуск последней версии XBAP. При отладке приложения в Visual Studio должна запускаться последняя версия XBAP. Как правило, номер версии развертывания необходимо обновлять при каждой сборке. Дополнительные сведения о команде Mage см. в разделе Mage.exe (средство создания и редактирования манифеста).
Связь с веб-страницей размещения
Если приложение находится во фрейме HTML, вы можете взаимодействовать с веб-страницей, которая содержит XBAP. Для этого извлеките свойство HostScript элемента BrowserInteropHelper. Оно возвращает объект скрипта, представляющий окно HTML. Доступ к свойствам, методам и событиям можно получить в объекте окна, используя обычный синтаксис с точками. Также можно получить доступ к методам скрипта и глобальным переменным. В следующем примере показано, как извлечь объект скрипта и закрыть браузер.
private void Button_Click(object sender, RoutedEventArgs e)
{
// Retrieve the script object. The XBAP must be hosted in a frame or
// the HostScript object will be null.
var scriptObject = BrowserInteropHelper.HostScript;
// Call close to close the browser window.
scriptObject.Close();
}
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
' Retrieve the script object The XBAP must be hosted in a frame or
' the HostScript object will be null.
Dim scriptObject = BrowserInteropHelper.HostScript
' Call close to close the browser window.
scriptObject.Close()
End Sub
Отладка XBAP, в котором используется HostScript
Если XBAP использует объект HostScript для взаимодействия с окном HTML, для запуска и отладки приложения в Visual Studio необходимо задать два параметра. Приложение должно иметь доступ к своему исходному сайту, а запустить его необходимо с HTML-страницы, которая содержит XBAP. Ниже описаны процедуры проверки двух этих параметров:
В Visual Studio откройте свойства проекта.
На вкладке Безопасность нажмите кнопку Дополнительно.
Отобразится диалоговое окно с расширенными параметрами безопасности.
Убедитесь, что флажок Предоставить приложению доступ к своему исходному сайту установлен, и нажмите кнопку ОК.
На вкладке Отладка выберите параметр Запустить браузер, используя URL-адрес и укажите URL-адрес HTML-страницы, содержащей XBAP.
В Internet Explorer нажмите кнопку Сервис и выберите Свойства обозревателя.
Откроется диалоговое окно «Свойства веб-обозревателя».
Перейдите на вкладку Дополнительно.
В списке Параметры в разделе Безопасность установите флажок Разрешать запуск активного содержимого файлов на моем компьютере.
Щелкните OK.
Чтобы изменения вступили в силу, Internet Explorer необходимо перезапустить.
Внимание
Включение активного содержимого в Internet Explorer может подвергнуть компьютер риску. Если вы не хотите изменять настройки безопасности Internet Explorer, запустите HTML-страницу с сервера и присоедините к процессу отладчик Visual Studio.
Вопросы безопасности XBAP
Обычно XBAP выполняются в изолированной среде безопасности частичного доверия, ограниченной набором разрешений зоны Интернета. Следовательно, ваша реализация должна поддерживать подмножество элементов WPF, которые поддерживаются в зоне Интернета; в противном случае разрешения приложения придется повысить. Дополнительные сведения см. в статье Безопасность.
Если в приложении используется элемент управления WebBrowser, WPF создает в нем экземпляр машинного элемента управления WebBrowser ActiveX. Если ваше приложение — это XBAP частичного доверия, запущенный в браузере Internet Explorer, элемент управления ActiveX выполняется в выделенном потоке процесса Internet Explorer. В связи с этим применяются указанные ниже ограничения.
Элемент управления WebBrowser должен обеспечивать поведение, аналогичное браузеру узла, включая ограничения безопасности. Некоторыми из этих ограничений безопасности можно управлять с помощью параметров безопасности Internet Explorer. Дополнительные сведения см. в статье Безопасность.
Если XBAP загружается на HTML-странице в междоменном режиме, возникнет исключение.
Входные данные поступают как отдельный поток из WPF WebBrowser, поэтому ввод с клавиатуры перехватить нельзя, а состояние IME не является общедоступным.
Время или порядок навигации могут отличаться, если элемент управления ActiveX выполняется в другом потоке. Например, переход на какую-либо страницу не всегда отменяется при запуске другого запроса навигации.
Настраиваемый элемент управления ActiveX может испытывать проблемы со связью, поскольку приложение WPF выполняется в отдельном потоке.
MessageHook не вызывается, потому что HwndHost не может назначить в качестве подкласса окно, выполняемое в другом потоке или процессе.
Создание XBAP с полным доверием
Если XBAP требует полного доверия, проект можно изменить, предоставив ему соответствующее разрешение. Чтобы предоставить полное доверие, необходимо выполнить указанные ниже действия.
В Visual Studio откройте свойства проекта.
На вкладке Безопасность выберите параметр Это приложение с полным доверием.
При этом происходят следующие изменения:
В файле проекта значение элемента
<TargetZone>
изменяется наCustom
.В манифесте приложения (app.manifest) к элементу PermissionSet добавляется атрибут
Unrestricted="true"
.<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
Развертывание XBAP с полным доверием
При развертывании XBAP с полным доверием, не основанного на модели доверенного развертывания ClickOnce, действия, выполняемые после того, как пользователь запустит приложение, зависят от зоны безопасности. В некоторых случаях пользователь получит предупреждение при попытке установить приложение. Пользователь может выбрать продолжение или отмену установки. В следующей таблице описаны поведение приложения для каждой зоны безопасности и действия, необходимые для получения приложением полного доверия.
Зона безопасности | Поведение | Получение полного доверия |
---|---|---|
Локальный компьютер | Автоматическое получение полного доверия | Никаких действий не требуется. |
Интрасеть и надежные веб-сайты | Запрос полного доверия | Подпишите приложение XBAP с помощью сертификата, чтобы пользователь видел источник в запросе. |
Интернет | Сбой с сообщением "Доверие не оказано" | Подпишите приложение XBAP с помощью сертификата. |
Примечание.
Поведение, описанное в предыдущей таблице, относится к приложениям XBAP с полным доверием, не следующим модели доверенного развертывания ClickOnce.
Для развертывания XBAP с полным доверием рекомендуется использовать модель доверенного развертывания ClickOnce. Она позволяет XBAP получать полное доверие автоматически, независимо от зоны безопасности и не запрашивая подтверждение пользователя. При использовании этой модели приложение должно быть подписано сертификатом надежного издателя. Дополнительные сведения см. в разделах Общие сведения о развертывании доверенных приложений и Знакомство с подписыванием кода.
Влияние времени запуска XBAP на производительность
Важную роль в производительности XBAP играет время его запуска. Если XBAP является первым загружаемым приложением WPF, время холодного запуска может составить от десяти секунд. Это связано с тем, что страницу хода выполнения обрабатывает WPF, а для того, чтобы отображать приложение, требуется холодный запуск CLR и WPF.
Начиная с версии .NET Framework 3.5 SP1, время холодного запуска XBAP уменьшается за счет того, что неуправляемая страница хода выполнения отображается на более раннем этапе цикла развертывания. Она открывается практически сразу после того, как приложение будет запущено, поскольку отображается машинным кодом размещения и выводится на экран в формате HTML.
Кроме того, улучшенный параллелизм последовательности загрузки ClickOnce сокращает время запуска почти на десять процентов. После того, как ClickOnce загрузит и проверит манифесты, запускается загрузка приложения, а индикатор выполнения начинает обновляться.
См. также
.NET Desktop feedback